mod_rewrite匹配URI的开头

时间:2015-02-09 17:37:55

标签: .htaccess mod-rewrite

下午好, 我在从URI的开头获取我的mod_rewrite规则时遇到了相当大的困难。我查看了手册但我必须遗漏一些(可能很明显的)语法巫术。请考虑以下事项:

RewriteCond %{REQUEST_URI}              ^/(.*)/(foo|bar)/(.*) 
RewriteRule ^(.*)/(.*)/(.*)/            destination.php?first=$1&second=$2&third=$3              [QSA,L]

如果第二个URI参数是foo或bar,(例如url.com/first/foo/third),则使用相关参数成功重定向到目标。

如果第三个参数中存在foo或bar(例如url.com/first/second/foo),我希望发生不同的重定向。但是,以下规则将被忽略,上述规则仍然具有优先权

RewriteCond %{REQUEST_URI}              ^/(.*)/(something-else)/(.*) 
RewriteRule ^(.*)/(.*)/(.*)/            destination.php?first=$1&second=$2&third=$3              [QSA,L]

我认为我必须错过一种迫使重写只能从URI的开头匹配的显而易见的方法 - 我试过预先添加斜线以试图强制它到根级别,但到目前为止没有任何喜悦

任何帮助将不胜感激! 感谢

修改 事实证明,这是由于一个基本的RegEx错误,而不是我错误地假设从URI开始需要匹配。我不会编辑标题,因为其他人可能犯了类似的错误。

1 个答案:

答案 0 :(得分:0)

.*太贪心了。试试这两条规则:

RewriteRule ^([^/]+)/(foo|bar)/([^/]+)/?$ destination.php?first=$1&second=$2&third=$3 [QSA,L]

RewriteRule ^([^/]+)/([^/]+)/(foo|bar)/?$ destination2.php?first=$1&second=$2&third=$3 [QSA,L]