2011-12-04 153 views
0

嘗試用X替換CMS_的所有實例。僅設法獲得目前爲止的無限循環。mod_write無限循環

Input: /mydir/?CMS_q=1&CMS_g=3 ... 
Output: ?Xq=1&Xg=3 ... 

的.htaccess:

RewriteEngine On 
RewriteRule ^/?mydir/(.+) $1      [R] 
RewriteRule ^(.*?)CMS_(.*?CMS_.*)$ $1X$2   [N,R] 
RewriteRule ^(.*?)CMS_(.*)$ $1X$2    [L,R] 

我幾年前有一個工作腳本,並失去了它。我不記得曾經做過「一次取代1,直到剩下1個」業務,但我在類似的問題中看到了它的建議。似乎無法讓它工作。

回答

1

您無法匹配RewriteRule中的查詢字符串,該查詢字符串只與URI匹配。你可以使用這個從查詢字符串中刪除CMS_:

RewriteCond %{QUERY_STRING} (.*)CMS_(.*) 
RewriteRule ^(.*)$ /$1?%1X%2 

放任這種循環將與X更換CMS_,mod_rewrite的將繼續循環通過這個,直到查詢沒有更多CMS_串。這是第二條規則也發揮了作用:

RewriteCond %{QUERY_STRING} !CMS_ 
RewriteRule ^mydir/$/[L,R] 

首先需要進行檢查,以確保沒有CMS_在查詢字符串(否則,規則面前取出MYDIR將過早應用),然後,刪除前面的mydir。在此之前也別忘了RewriteEngine On

這2條規則將導致要求將http://yourdomain.com/mydir/?CMS_q=1&CMS_w=2&CMS_e=3&CMS_r=4重定向到http://yourdomain.com/?Xq=1&Xw=2&Xe=3&Xr=4