2

.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 を使用して小文字を強制しています。スレッドのレビューに丸一日を費やしましたが、問題を特定できないようです..または、おそらく私はこれを間違った方法で見ています.

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

4

1 に答える 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[]=Liverpool (正解)
  • Googlebot: domain.com/client/city?mf%5D%5B=リバプール (200、正解)

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

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

于 2013-08-23T20:13:08.920 に答える