3

我想重写所有最终必须%3Ffull%3D1的传入 URL?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>
4

2 回答 2

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]
于 2014-01-24T18:06:36.443 回答
0

尝试L在处理查询字符串的规则中添加标志:

RewriteRule ^(.*)%3F(.+)%3D(.+)$ $1?$2=$3 [L,R=301]

RewriteRule . /index.php [L]否则,重写后的URI最终可能会被最后一条规则(你的规则不匹配,你需要类似的东西:%3Ffull%3D1

RewriteCond %{QUERY_STRING} ^(.*)%3Ffull%3D1(.*)$
RewriteRule ^(.*)$ $1?%1&full=%2 [L,R=301]
于 2012-11-24T09:25:05.680 回答