2016-10-24 47 views
1

我有阿帕奇mod_rewrite的一个小麻烦变量的内容,我需要能够修改(追加)变量名称为其他依赖于正则表达式中的URL另一个变量:mod_rewrite的改变

https://localhost:85/fight?shoes=baby.firstlove&type=textype&awesome=23481234 

通过这个我的意思是,如果“真棒=”是234 [8,7] 1234,鞋= baby.firstlove应该成为shoes = baby.firstlovefirsttry,或者如果真棒= 234 [1,2] 1234,那么shoes = baby。第一爱,应该成为鞋= baby.firstlovesecondtry。

我重写规则是这样的事情(试图捕捉真棒= 23411234或真棒= 23425678):

RewriteCond %{QUERY_STRING} shoes=(.+)\&awesome=(\b234(1|2)\d{4}\b) 
RewriteRule ^(.*)$ http://localhost:85/fight?shoes=baby.firstloveactual&subscriber=%2 [P] 

但预期它们不会改变“鞋=”变量的内容。 该URL保持不变:

http://localhost:85/fight?shoes=baby.firstlove&type=textype&awesome=23481234 

请问我做错了什么?

+0

*“没有按预期更改'”shoes =“'变量内容”* - 发生了什么?请在您的帖子中添加任何相关的输出或错误消息(单击[编辑](http://stackoverflow.com/posts/40219803/edit))。 –

回答

0
RewriteCond %{QUERY_STRING} shoes=(.*)\&awesome=(\b234(1|2)\d{4}\b) 

你的正则表达式不匹配您的示例网址:

https://localhost:85/fight?shoes=baby.firstlove&type=textype&awesome=23481234 

你有一个8在您的正则表达式期待一个12。但是,如果您需要匹配一系列字符中的一个,那么您应该使用字符类(例如[12])而不是括号/捕获组。另外,我不确定你正在尝试使用单词界限(即\b)?使用P标志的意图是什么?推测你需要外部重定向

但是,您的代码示例似乎不符合您对问题的文本描述?

如果 “真棒=” 是234 [8,7] 1234,鞋= baby.firstlove应该成为鞋= baby.firstlovefirsttry

尝试下面的(假设 “1234” 是文本字符串,而不是任何 4位数字):

RewriteCond %{QUERY_STRING} shoes=.+&awesome=(234[87]1234) 
RewriteRule ^/?fight http://localhost:85/fight?shoes=baby.firstloveactual&subscriber=%1 [R,L] 

您已经使用在你的榜样网址https,但http在你重写?

+0

对不起,我原来的帖子错误很多。现在清理。 – Sina

+0

我想我已经找到了这样一种解决方案: ' RewriteCond%{QUERY_STRING} shoes = baby \。(\ w +)\&(。*)\&awesome =(\ b234(1 | 2)\ d {4} \ b) RewriteRule /fight?(.*)$ http:// localhost:85/fight?shoes = baby。第一次实现&%2&真棒=%3 [P] ' 这种照顾的urlse在鞋和真棒之间有一个变量,如: [link] http:// localhost:85/fight?shoes = baby .firstlove&type = textype&awesome = 23481234 我会看看它是否能够在一天的光明下幸存下来...... 好吧,我认为我已经失去了在代码中加入评论的战斗。 – Sina

+0

以上(包括您的原始条件)已经“照顾了在'shoes'和'awesome'之间有一个变量的URL,这就是'。+'在'shows =。+&awesome'中所做的 - 它匹配所有内容这可能太多了 - 虽然这正是你修改后的正则表达式所做的)。请注意,在'/ fight?(。*)$'模式中'''使前面的“t”成为可选项,后面的'(。*)$'是多余的。啊,这些规则直接在你的服务器配置?我会更新我的答案(我假设你使用'.htaccess')。 – MrWhite