我们有这个RedirectMatch规则来移动支持SSL的站点上的客户端,同时保持他们试图访问的path:
Redirectmatch permanent (.*) https://www.foobar.com$1
它的工作是完美的。 现在我们想添加一个不应该被redirect的/ somepathexception。 我怎样才能做到这一点?
用mod_rewrite我会添加一个重写,说“不要重写和停止匹配”,但没有这样的机制与redirect。 另外,如果我像!(/ somepath | / someotherpath)一样反转正则expression式,它将不再获得$ 1参数。
任何你不想使用mod_rewrite的原因?
你可以用这个来模仿这个function:
RewriteCond%{REQUEST_URI}!^ /(somepath | someotherpath)
RewriteRule(。*)$ 1 [R =永久]
RewriteRule http://%{SERVER_NAME}(。*)https://www.foobar.com$1 [L]
我没有意识到Apache使用PCRE。 既然是这样,你可以做一些巫术来做你想要的mod_alias:
RedirectMatch永久^ /?((?!(thisisfoo | thisisbar))。*)https://www.foobar.com/$1
/ thisisfoo和/ thisisbar是redirect的例外。
根据文档( http://httpd.apache.org/docs/2.2/mod/mod_alias.html#order ), Redirect按照遇到的顺序进行处理。 所以,你会想先把你的限制性规则放在第一位,然后在最后加上你所有的规则。