从重写条件中排除一个网址

时间:2014-08-01 19:52:34

标签: apache .htaccess mod-rewrite

我有以下mod_rewrite规则从site.com重定向到www.site.com:

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=permanent,L] .

我需要从此规则中排除以/ yandex_market

开头的网址
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{REQUEST_URI} !^/yandex_market.*$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=permanent,L] .

但是规则仍然适用于以/ yandex_market开头的网址如何解决?

1 个答案:

答案 0 :(得分:1)

问题是您的第二条规则会将/yandex_market/foo URI重写为/index.php?module=YandexPurchaseView&type=foo,从而使RewriteCond %{REQUEST_URI} !^/yandex_market.*$ [NC]条件成功。您需要使用%{THE_REQUEST}变量作为您的条件,并且不会因应用重写规则而发生变化。

保持这样的规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{THE_REQUEST} !/yandex_market [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,NE,L]

RewriteRule ^yandex_market/(.+)$ index.php?module=YandexPurchaseView&type=$1 [L,NC,QSA]