/ / htaccessのダブルエンコーディングを修正しようとしています-apache、.htaccess

htaccessのダブルエンコーディングを修正しようとしています-Apache、.htaccess

.htaccessを使用して、URLを小文字に変換することはできますが、大文字のエンコードは許可されますか?

現行ファイル:

RewriteCond %{REQUEST_URI} ^[^A-Z]*[A-Z].* [OR]
RewriteCond %{QUERY_STRING} ^[^A-Z]*[A-Z].*
RewriteRule ^ ${lc:%{REQUEST_URI}}?${lc:%{QUERY_STRING}} [L,NE,R=301]
RewriteRule ^client/(.*) client.php?q=type:$1 [QSA]
  • ブラウザ:domain.com/client/city?mf [] = liverpool(正しい)
  • Googlebot:domain.com/client/city?mf%5d%5b = liverpool(301、正しくない)

[NE]を削除すると、結果のURLは二重にエンコードされます。

  • ブラウザ:domain.com/client/city?mf%255b%255d = liverpool(200、ただし 間違った結果)
  • Googlebot:domain.com/client/city?mf%255b%255d = liverpool(200、ただし 間違った結果)

望ましい出力:

  • ブラウザ:domain.com/client/city?mf [] = liverpool(正しい)
  • Googlebot:domain.com/client/city?mf%5D%5B = liverpool(200、正解)

RewriteMapを使用して小文字を強制します以前のサイトはケースが混在していて、組み合わせが多すぎて管理できませんでした。一日中スレッドのレビューに費やしましたが、問題を切り分けることができないようです。または、おそらく私はこれを間違った方法で見ています。

ありがとうございました。

回答:

回答№1は0

部分的な解決策を見つけました。これは私の目的には十分です。regileroのコメントに基づいて、{QUERY_STRING}のRewriteCondを削除することにしました。これは新しいコードです。

RewriteRule ^client/(.*) client.php?q=type:$1 [QSA]
RewriteCond %{REQUEST_URI} ^[^A-Z]*[A-Z].*
RewriteRule ^ ${lc:%{REQUEST_URI}} [L,R=301]

上記の結果は次のようになります。

  • ブラウザ:domain.com/client/city?mf [] =リバプール(正しい)
  • Googlebot:domain.com/client/city?mf%5D%5B = Liverpool(200、正解)

サイト全体ですべて小文字が必要な理由は以前のサイト構造へ-上記の配列は(正規リンクのために)インデックス付けされたことがない機能であるため、大文字と小文字が混在するクエリを使用できます。

私はこれが他の誰かに役立つことを願っています!