mod_rewrite更改变量内容

时间:2016-10-24 13:31:49

标签: regex apache mod-rewrite

我对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}}

请问我做错了什么?

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

您的正则表达式需要81 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