1

www を non にリダイレクトすることは正常に機能していますが、%2520 のすべての出現箇所をスペースに変えて、それらを組み合わせると QUERY_STRING を使用すると失敗するようです。私は RewriteCond と RewriteRule を組み合わせて Google で調べたり、SOed したりしましたが、これがどのように機能するかに近いとさえ思われる例を見つけることができません。私が解決したのは、おそらく (.*) 正規表現を悪用しているということだけです。完全な正規表現と mod_rewrite の noob がここにあります - 悪意のあるコメントはご遠慮ください :-) よろしくお願いします!

私はこれとその逆を試しました:

RewriteCond %(HTTP_HOST) ^www.mywebsite\.com$
RewriteRule (.*) http://mywebsite.com/$1 [R=301,L]
RewriteCond %{QUERY_STRING} ^(.*)(%2520)(.*)$
RewriteRule ^(.+)$ $1?%1\ %3 [N,R=301]
4

1 に答える 1

1

URL で許可される文字のサブセットは限られています。スペースは URL の文字として許可されていないため、 にエンコードされ%20ます。同様に%2520、二重にエンコードされたスペースです。

あなたが提供するルールは私にとってはうまく機能します(キャプチャグループ%2520は不要なので省略できますが、何も壊れません)。に変身http://example.com/minimalonecharacter?asdf%2520qwerhttp://example.com/minimalonecharacter?asdf%20qwerます。

301これにはステータス コード(パーマネント リダイレクト) を使用していることに気付きました。すべてが希望どおりに機能するまで、永続的なリダイレクトでテストしないことをお勧めします。ブラウザーは、サーバーへの要求をスキップして、永続的なリダイレクトをキャッシュする場合があります。間違った書き換え規則を作成すると、この結果がキャッシュされ、将来の試みは「不思議なことに」最初の試みを指します。

于 2013-08-02T16:16:38.153 に答える