Как сделать 301-редирект более 200 страниц на соответствующие 200 страниц в новом месте?

Как сделать 301-редирект более 200 страниц на соответствующие 200 страниц в новом месте?

Мне нужна помощь, и она нужна быстро.

Недавно мы перенесли поддомен для интеграции с доменом.

https://blog.example.comНапример , кhttps://www.example.com/blog

https://blog.example.comимеет тонну трафика, который мы не хотим терять. Поэтому нам нужно сделать 301 редирект.

Проблема в том, что https://blog.example.comу него более 200 страниц, которые работают хорошо.

Мне нужен совет, как перенаправить все страницы на соответствующие страницы в новом месте, не замедляя работу сайта и не перегружая сервер.

Мы попытались

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^example.com [NC,OR]  
RewriteCond %{HTTP_HOST} ^www.example.com [NC]   
RewriteRule ^(.*)$ https://example.net/$1 [L,R=301,NC]

Но только домашний пахе был перенаправлен

Нужно ли нам перенаправлять каждую из этих страниц по одной?

решение1

Мы попытались

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^example.com [NC,OR]  
RewriteCond %{HTTP_HOST} ^www.example.com [NC]   
RewriteRule ^(.*)$ https://example.net/$1 [L,R=301,NC]

Вы сказали, что «недавно перенесли поддомен», однако опубликованный вами код не нацелен на поддомен и конфликтует с примерами имен хостов, которые вы описали в вопросе?

Это перенаправит «только домашнюю страницу», если вы поместили ее в неправильное место в .htaccessфайле. Например, если вы поместили еепослевнутренняя переписывание на фронт-контроллер. Это перенаправление должно быть в самом верху вашего корневого .htaccessфайла.

без замедления работы сайта и перегрузки сервера.

200 подобных URL-перенаправлений незначительны с точки зрения производительности/накладных расходов. Однако, чтобы полностью минимизировать все влияние, которое могут оказать эти перенаправления, blogподдомен должен указывать на другую область файловой системы, что еще больше упрощает перенаправление. (На самом деле, вам не нужно указывать поддомен на какой-либо конкретный каталог, а вместо этого выполнять перенаправление непосредственно в конфигурации сервера/виртуальном хосте, а не .htaccess.)

Ваши "200 перенаправлений" могут быть выполнены с помощью одной Redirectдирективы mod_alias (в контейнере .htaccessили <VirtualHost>). Например:

Redirect 301 / https://www.example.com/blog/

Директива Redirectявляется префиксной и все после соответствия копируется в конец целевого URL. Так, например, http(s)://blog.example.com/anything301 перенаправляется на https://www.example.com/blog/anything.

В противном случае, если ваш поддомен и основной домен указывают на одно и то же место в файловой системе, используйте mod_rewrite для проверки запрошенного имени хоста, так же, как вы делали изначально (хотя не совсем понятно, зачем вы проверялиexample.com или www.example.comкогда вам следовало бы проверить наличие поддомена blog.example.com).

Например, вочень топкорневого .htaccessфайла:

 RewriteEngine On

 RewriteCond %{HTTP_HOST} ^blog\.example\.com [NC]
 RewriteRule (.*) https://www.example.com/$1 [R=301,L]

Флаг NCизлишен, поскольку регулярное выражение .*уже соответствует всему.

Или используйте REQUEST_URIпеременную сервера вместо этого в RewriteRuleдирективе и избегайте обратной ссылки. Например:

 :
 RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

Переменная сервера REQUEST_URIуже включает в себя префикс слеш.

Сначала протестируйте с 302 (временным) редиректом, чтобы избежать потенциальных проблем с кэшированием. И убедитесь, что вы очистили кэш браузера перед тестированием.

Связанный контент