Apache RewriteRule正则表达式问题

时间:2012-06-27 23:26:46

标签: regex apache mod-rewrite

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.

1 个答案:

答案 0 :(得分: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中。