我想重写最后有%3Ffull%3D1
到?full=1
的所有传入网址
我在htaccess尝试这个但不行:
RewriteRule ^(.*)%3F(.+)%3D(.+)$ $1?$2=$3 [R=301]
这里是完整的.htaccess
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^(.*)%3F(.+)%3D(.+)$ $1?$2=$3 [R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
答案 0 :(得分:1)
我最近实现了以下.htaccess代码来完成此操作 - 我已经修改它以适应您使用“完整”参数的情况。
# replace %3F with ? and %3D with =
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\%]+)\%3[Ff]full\%3[dD]([^\ ]+)\ HTTP/
RewriteRule \.*$ http://www.mywebsite.com/%1?full=%2 [R=301,L]
答案 1 :(得分:0)
尝试在处理查询字符串的规则中添加L
标志:
RewriteRule ^(.*)%3F(.+)%3D(.+)$ $1?$2=$3 [L,R=301]
否则,重写的URI最终可能会被最后一条规则(RewriteRule . /index.php [L]
)处理,但仍然被重定向,因为URI标记为301.此外,如果原始您尝试重定向的网址在查询字符串本身中包含%3Ffull%3D1
,那么您的规则不会与之匹配,您需要以下内容:
RewriteCond %{QUERY_STRING} ^(.*)%3Ffull%3D1(.*)$
RewriteRule ^(.*)$ $1?%1&full=%2 [L,R=301]