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 コードを実装しました。「full」パラメーターを使用するシナリオに合わせて修正しました。

# 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]

そうしないと、書き換えられたURIが最後のルール(RewriteRule . /index.php [L])によって処理されても、URIに301のフラグが設定されているため、リダイレクトされる可能性があります。また、リダイレクトしようとしている元のURLが%3Ffull%3D1 クエリ文字列自体に含まれている場合は、ルールがそれに一致しない場合は、次のようなものが必要になります。

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