2012-06-27 131 views
0

http://httpd.apache.org/docs/2.2/rewrite/intro.html说:阿帕奇重写规则的正则表达式问题

在了mod_rewrite的!角色可以一个正则表达式前使用否定它。这是,只有当字符串不匹配表达式的其余部分时,字符串才会被认为匹配。

但是,我的配置只适用于第一条规则,但不适用于第二条规则。有人能告诉我为什么吗?

RewriteCond %{HTTP_HOST} !^static\.example\.com 
RewriteCond %{HTTP_HOST} ^host\.example\.com 
RewriteRule ^(/global/.*)$ /dir1 
RewriteRule !^(/global/.*)$ /dir2 #this rule doesn't work. 
+0

为什么不使用。*而不是因为你的第二个正则表达式会匹配没有被第一个正则表达式匹配的任何东西? – flec

+0

'RewriteCond'只适用于它上面的直接规则。这是你的预期行为?另外,如果你在'/ dir1'重定向上设置了'[L]'标志,那么你可以使用@flec的建议。 –

+0

你可以发布第二条规则不适用的URL吗?这个规则在哪里使用(.htaccess或httpd.conf)? –

回答

0

其实我已经通过将规则分成两部分了。 host.example.com和example.com都可以正常工作。

RewriteCond %{HTTP_HOST} !^static\.example\.com 
RewriteCond %{HTTP_HOST} ^host\.example\.com 
RewriteRule ^(/global/.*)$ /dir1 [L] 

RewriteCond %{HTTP_HOST} !^static\.example\.com 
RewriteCond %{HTTP_HOST} ^host\.example\.com 
RewriteRule ^(.*)$ /dir2 [L] 

但是我仍然想知道如何使用“!”在RewriteRule中。