2016-10-24 86 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