Простой 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 это путь

Другие вопросы по тегам