Dan*_*oof 4 regex .htaccess mod-rewrite
我正在尝试从以下位置重写网址:
http://domain.com/aa/whatever/whatever.php
到
http://domain.com/whatever/whatever.php?language=aa
但是,根据现有的$ _GET变量,它必须是?language或&language.
为此,我使用带有[L]标志的2个正则表达式:
RewriteRule ^([a-z]{2})/(.*\.php\?.*) /$2&language=$1 [L]
RewriteRule ^([a-z]{2})/(.*) /$2?language=$1 [L]
Run Code Online (Sandbox Code Playgroud)
第二个按预期工作......然而,第一个没有被击中(它落到第二个正则表达式,确实命中),即使Regex Coach确实告诉我它应该.
编辑:
如果只是读到我需要使用两个反斜杠来逃避问号.如果我这样做,它确实击中了第一个正则表达式但从未找到其他GET变量.
从mod_rewrite的文档中,RewriteRule中的模式与主机名和端口之后以及查询字符串之前的URL部分匹配,因此不包括查询字符串.这就是为什么你没有得到其他变量.
要language=xx
在保留任何现有查询字符串的同时添加新的查询字符串参数,您需要使用QSA标志(查询字符串追加).有了这个标志,只有一个基于你的第二个案例的规则就足够了:
RewriteRule ^([a-z]{2})/(.*) /$2?language=$1 [QSA]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2282 次 |
最近记录: |