Ошибка в порядке выполнения с RewriteRules
По маркетинговым причинам я использую некоторые тщеславные URL для более удобного доступа и для отслеживания некоторых кампаний. К сожалению, я застрял на управляемом выделенном сервере с cPanel, и я предпринял следующие шаги, чтобы написать свои правила:
- Сначала я добавил
xyz.com
а такжеefg.com
парковать домены в моей cPanel - Тогда я написал все
RewriteRule
с, что мне нужно
.htaccess
RewriteCond %{HTTP_HOST} ^xyz\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.xyz\.com$
RewriteRule ^signdirections$ "http\:\/\/xyz\.abc\.com\/en?utm_source=signdirections&utm_medium=advert&utm_campaign=xyz" [R=301,L]
RewriteCond %{HTTP_HOST} ^efg\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.efg\.com$
RewriteRule ^signdirections$ "http\:\/\/efg\.abc\.com\/en?utm_source=signdirections&utm_medium=advert&utm_campaign=efg" [R=301,L]
Теперь проблема в том, что если я попытаюсь получить доступ www.efg.com/signdirections
Я буду перенаправлен на www.xyz.com/signredirections
версия, а не EFG.
Есть идеи, почему это происходит? Моя интуиция заключается в том, что он обнаруживает одно и то же имя хоста (HTTP_HOST), но я не могу понять, почему.
2 ответа
Скорее всего, это происходит из-за других ваших правил. Лучше использовать THE_REQUEST
переменная, которая не изменяется после применения других правил.
Вы также можете объединить оба ваших правила в одно:
RewriteCond %{HTTP_HOST} ^(?:www\.)?(xyz|efg)\.com$ [NC]
RewriteCond %{THE_REQUEST} /signdirections [NC]
RewriteRule . http://%1.abc.com/en?utm_source=signdirections&utm_medium=advert&utm_campaign=%1 [R=301,L,NE,QSA]
- Убедитесь, что это ваше первое правило ниже
RewriteEngine On
линия. - Обязательно протестируйте его в новом браузере, чтобы избежать кеша старого браузера.
Я не знаю, может ли это быть ошибкой кеша после плохого теста:
Как долго браузеры кэшируют HTTP 301?
Просто упрощенная версия:
RewriteCond %{HTTP_HOST} ^(?:www\.)?xyz\.com$
RewriteRule ^signdirections$ http://xyz.abc.com/en?utm_source=signdirections&utm_medium=advert&utm_campaign=xyz [R=302,L]
RewriteCond %{HTTP_HOST} ^(?:www\.)?efg\.com$
RewriteRule ^signdirections$ http://efg.abc.com/en?utm_source=signdirections&utm_medium=advert&utm_campaign=efg [R=302,L]
Попробуйте с R=302, и когда все работает, измените на R=301