2014-10-15 1 views
0

Как выполнить последний RewriteRule в списке Rewrite ниже, если ни один из RewriteRules не согласован? (немного похоже на правило catch)?Как выполнить последний RewriteRule, если RewriteRules над ним не совпадают?

Что у меня есть:

RewriteCond %{QUERY_STRING} referrer=as 
RewriteRule ^legal/privacy$ /about/privacy [L,NC,R=301] 
RewriteRule ^Disclaimer$ /about/legal [L,NC,R=301] 
RewriteRule ^Privacy-Collection-Statement$ /about/privacy [L,NC,R=301] 
# Catch all rule below 
RewriteRule ^(.*)$ http://company.com/about [NC,R=301] 

Так, если URL является:

http://company.com/blah/blah?referrer=as 

было бы перенаправить (используя улов все правила):

http://company.com/about?referrer=as 

Любая помощь будет оценена.

ответ

0

Должно быть L | последний флаг

http://httpd.apache.org/docs/2.2/rewrite/flags.html

«код [L] флаг вызывает mod_rewrite прекратить обработку набора правил В большинстве контекстов, это означает, что, если правило не соответствует, никаких дополнительных правил. будет обработан."

Rule A [L] 
Rule B [L] 
Rule C [L] 
Catchall rule 
0

Вам нужно будет иметь отрицательное состояние в броской все правила, чтобы сделать его уволить за все, что уже не был перенаправлен на:

RewriteEngine On 

RewriteCond %{QUERY_STRING} referrer=as 
RewriteRule ^legal/privacy$ /about/privacy [L,NC,R=301] 

RewriteRule ^Disclaimer$ /about/legal [L,NC,R=301] 

RewriteRule ^Privacy-Collection-Statement$ /about/privacy [L,NC,R=301] 

# Catch all rule below 
RewriteCond %{THE_REQUEST} !\s/about/(privacy|legal|privacy)?[/?\s] [NC] 
RewriteRule^http://company.com/about/ [NC,L,R=301] 

Здесь !^about/(privacy|legal|privacy)/?$ шаблон является отрицательный матч шаблон, который соответствует всем, что не является /about/privacy, а не /about/legal, а не /about/privacy.

+0

Спасибо за быстрый ответ. То, что вы говорите, имеет смысл, если я укажу следующий URL-адрес: localhost/legal/privacy? Referrer = as Я ожидаю, что первый RewriteRule начнет стрелять, однако загорается все правило. Я очистил историю кеша/просмотра и все. Если я прокомментирую правило catchall, первое правило срабатывает при использовании указанного выше URL-адреса. Возможно, какие-то идеи чего-то не хватает? –

+0

С помощью этих правил в моем .htaccess, когда я открываю '/ legal/privacy? Referrer = as', он правильно перенаправляется на'/about/privacy? Referrer = as'. У вас есть другие правила или какой-либо .htaccess в каталоге '/ about /'? – anubhava

+0

Также попробуйте обновить правило один раз. – anubhava

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