下午好, 我在从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开始需要匹配。我不会编辑标题,因为其他人可能犯了类似的错误。
答案 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]