2011-12-04 229 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