Мне нужна помощь, и она нужна быстро.
Недавно мы перенесли поддомен для интеграции с доменом.
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/anything
301 перенаправляется на 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 (временным) редиректом, чтобы избежать потенциальных проблем с кэшированием. И убедитесь, что вы очистили кэш браузера перед тестированием.