Простой 301 редирект с htaccess
Я хочу перенаправить URL со страницы, которая больше не активна. URL-адрес https://tchibo.academyofsports.promo/ а также все его подстраницы должны быть перенаправлены на URL-адрес http://www.academyofsports.de/. Это то, что я до сих пор (.htaccess):
#Redirects
RewriteEngine On
RewriteRule https://tchibo.academyofsports.promo/ http://www.academyofsports.de/ [L,R=301]
К сожалению, это не работает таким образом. Что я делаю неправильно?
1 ответ
Это, вероятно, то, что вы ищете:
RewriteEngine On
RewriteCondition %{HTTP_HOST} ^tchibo\.academyofsports\.promo$ [NC]
RewriteRule ^/?(.*)$ http://www.academyofsports.de/$1 [L,R=301]
Причина в том, что RewriteRule
работает только с компонентом пути запрошенного URL, он не может видеть имя хоста. Приведенное выше правило должно работать аналогичным образом в файлах конфигурации хоста http-серверов и файлах динамической конфигурации.
Если вас не интересует путь, который был запрошен изначально, но вы хотите перенаправить всех к точке входа, то вы можете упростить приведенное выше:
RewriteEngine On
RewriteCondition %{HTTP_HOST} ^tchibo\.academyofsports\.promo$ [NC]
RewriteRule ^ http://www.academyofsports.de/ [L,R=301]
И общий совет: вы всегда должны предпочитать размещать такие правила в конфигурации хоста http-сервера (виртуального) вместо использования файлов динамической конфигурации (.htaccess
файлы стилей). Эти файлы, как известно, подвержены ошибкам, их трудно отлаживать, и они действительно замедляют работу сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет контроля над конфигурацией хоста (читай: действительно дешевые поставщики услуг хостинга) или если у вас есть приложение, которое полагается на написание своих собственных правил перезаписи (что является очевидным кошмаром безопасности)).
Реагируя на ваш комментарий ниже, я хочу добавить это:
Для реализации конкретных сопоставлений вы также можете добавить правила исключений:
RewriteEngine On
RewriteCondition %{HTTP_HOST} ^tchibo\.academyofsports\.promo$ [NC]
RewriteRule ^/?agb\.html$ http://www.academyofsports.de/Datenschutz [L,R=301]
RewriteCondition %{HTTP_HOST} ^tchibo\.academyofsports\.promo$ [NC]
RewriteRule ^/?(.*)$ http://www.academyofsports.de/$1 [L,R=301]
Проблема заключается в том, что вы должны повторять условие для каждого отдельного правила из-за внутренней логики модуля перезаписи. Есть один или два грубых взлома, чтобы обойти это, но так сложно поддерживать очень быстро. Если вам нужно указать несколько таких правил исключения, RewriteMap
это путь