2013-06-04 8 views
2

Итак, у меня есть два отдельных правила перезаписи в моем блоке vhost. Первое правило перенаправляет клиента за пределы сайта, если они входят через партнерский URL, например example.com/1234.html, а второе правило заставляет URL-адрес всегда содержать www-точку, например www.example.com.правила mod-rewrite, выполняющиеся не по порядку

# Affiliate Links 
RewriteRule ^([0-9]+)\.html$ http://affiliates.example.com/log.php?id=$1 [R=302,L] 

# Ensure we are always on www dot 
RewriteCond %{HTTP_HOST} ^example\.loc [NC] 
RewriteRule (.*) http://www.example.com$1 [R=301,L] 

Правила сами отлично работают. Проблема в том, что если применяется первое правило, я хочу, чтобы он немедленно перенаправлялся, однако кажется, что второе правило поднимается вверх, потому что оно всегда имеет приоритет. Что мне нужно изменить, чтобы они выполнялись в порядке?

+0

Попробуйте сначала очистить кеш браузеров. Я предполагаю, что здесь правила - это места внутри вашего раздела , из ваших конфигурационных файлов apache !? Что произойдет, если вы просто поменяете их? – Gerben

+0

Они находятся в блоке virtualhost, и я запускаю перезапуск apache после каждой модификации и открывая новый сеанс приватного просмотра для тестирования. Они в настоящее время находятся в том порядке, в котором я бы хотел, чтобы они выполнялись, но их переключение не меняет поведения. Спасибо за комментарий! –

ответ

0

Вы заявили, что это находится в блоке vhost. В этом контексте (в отличие, например, файл .htaccess) URL-адреса всегда начинаются с '/'

Таким образом

RewriteRule ^([0-9]+)\.html$ http://affiliates.example.com/log.php?id=$1 [R=302,L] 

вместо этого следует

RewriteRule ^/([0-9]+)\.html$ http://affiliates.example.com/log.php?id=$1 [R=302,L] 

(то есть, с ведущая косая черта), иначе она никогда не будет соответствовать чему-либо.

Смежные вопросы