2014-07-23 15 views
0

我想使用mod_rewrite來捕獲我的URL中的括號內的字符串,並做一個重定向。mod_rewrite:在URL中匹配字符串,哪個正則表達式選擇?

我的URL:

something?var_a=A&var_b=(B)&var_c=C

我用正則表達式.httaccess文件:

RewriteEngine on 
RewriteRule ^/?.+var_b=\((.*)\)$ somedir/$1 [R] 

我只是想捕捉圓括弧之間有什麼的,所以我的重定向應該看的東西像這樣:somedir/B

我測試我的正則表達式在http://htaccess.madewithlove.be/,但我得不到匹配。

我不知道我在這裏失去了什麼,即使我嘗試了更簡單的正則表達式,例如.+var_b(.*)$我得不到任何匹配。只有當我的正則表達式在開始尋找模式時,我纔會得到一個匹配,所以例如正則表達式something(.*)$的作品。

缺少什麼我在這裏?

回答

2
RewriteEngine On 
RewriteCond %{QUERY_STRING} (^|&)var_b=\((.*?)\)(&|$) [NC] 
RewriteRule ^.*$ somedir/%2? [R] 

原因是RewriteRule沒有收到?x=y部分查詢。變量%2指最後RewriteCond的模式,而$2指的是來自此RewriteRule的模式。最後的?防止查詢部分?x=y在結果的末尾自動附加。

(^|&)(&|$)的模式保證var_b=(B)是完整的參數,而不是它的一部分。沒有這些,模式也會匹配?xyzvar_b=(B)?var_b=(B)xyz。有了這些,它只會匹配?var_b=(B)?a=b&var_b=(B)&x=z

+0

謝謝!什麼是(^ |&)'和'($ |&)'? – user1981275

+0

我加了這個答案。 –