尝试用X替换所有CMS_实例。到目前为止只设法获得无限循环。
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人离开”的业务,但我看到它在一个类似的问题中提出。似乎无论如何都无法运作。
答案 0 :(得分:1)
您无法匹配RewriteRule中的查询字符串,该字符串仅与URI匹配。您可以使用以下命令从查询字符串中删除CMS_:
RewriteCond %{QUERY_STRING} (.*)CMS_(.*)
RewriteRule ^(.*)$ /$1?%1X%2
允许此循环将 CMS _ 替换为 X ,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