我对apache mod_rewrite有点麻烦,我需要能够根据URL中另一个变量的正则表达式修改(追加)一个变量名称:
RewriteCond %{QUERY_STRING} shoes=(.+)\&awesome=(\b234(1|2)\d{4}\b)
RewriteRule ^(.*)$ http://localhost:85/fight?shoes=baby.firstloveactual&subscriber=%2 [P]
我的意思是,如果&#34; awesome =&#34;是234 [8,7] 1234,鞋子= baby.firstlove应该成为鞋子= baby.firstlovefirsttry,或者如果真棒= 234 [1,2] 1234,那么鞋子= baby.firstlove,应该成为鞋子= baby.firstlovesecondtry。< / p>
我的重写规则是这样的(尝试捕获真棒= 23411234或awesome = 23425678):
http://localhost:85/fight?shoes=baby.firstlove&type=textype&awesome=23481234
但他们没有改变&#34; shoes =&#34;可变内容如预期。 网址保持不变:
{{1}}
请问我做错了什么?
答案 0 :(得分:0)
RewriteCond %{QUERY_STRING} shoes=(.*)\&awesome=(\b234(1|2)\d{4}\b)
您的正则表达式与您的示例网址不符:
https://localhost:85/fight?shoes=baby.firstlove&type=textype&awesome=23481234
您的正则表达式需要8
或1
2
。但是,如果您需要匹配一系列字符中的一个,那么您应该使用字符类(例如[12]
)而不是括号/捕获组。另外,我不确定你要对字边界做什么(即。\b
)?使用P
标志的意图是什么?大概你需要外部重定向?
但是,您的代码示例似乎与您对问题的文字描述不符?
如果&#34; awesome =&#34;是234 [8,7] 1234,鞋子= baby.firstlove应该成为鞋子= baby.firstlovefirsttry
尝试以下方法(假设&#34; 1234&#34;是文字字符串,而不是任何 4位数字):
RewriteCond %{QUERY_STRING} shoes=.+&awesome=(234[87]1234)
RewriteRule ^/?fight http://localhost:85/fight?shoes=baby.firstloveactual&subscriber=%1 [R,L]
您在示例网址中使用了https
,但在重写中使用了http
?