設定ファイル上でのURLエンコードされたリクエストの取り扱い [Apache]
apache内部でリクエストURIを処理する過程で、そのURIに含まれるURLエンコードされている部分はデコードされてしまう。
これは、http://example1.com//%E3%83%86%E3%82%B9%E3%83%88 へのアクセスを http://example2.com/へリダイレクトさせようと
という設定を追加してもうまくいかない。
この場合は、
ここで注意するのが、全角文字の文字コード。この場合はきちんとUTF-8の「テスト」を書いてやる必要がある。
不安な場合は、EUC,SJIS,UTF-8全部で書いてしまうのが確実。
こんな記述しなくて済む方法をご存知の方はこっそり教えていただけるとうれしいです。
関連ケースとして、mod_rewriteで以下の設定を行った場合も
でアクセスした場合に、$1の中身は"%E3%83%86%E3%82%B9%E3%83%88"ではなく"テスト"になってしまうが、この場合はNEフラグを書いてやれば解決する。
これは、http://example1.com//%E3%83%86%E3%82%B9%E3%83%88 へのアクセスを http://example2.com/へリダイレクトさせようと
RedirectMatch \/%E3%83%86%E3%82%B9%E3%83%88 http://example2.com/
(※実ファイル上では改行しません)
という設定を追加してもうまくいかない。
この場合は、
RedirectMatch \/テスト http://example2.com/と記述しないとならない。
ここで注意するのが、全角文字の文字コード。この場合はきちんとUTF-8の「テスト」を書いてやる必要がある。
不安な場合は、EUC,SJIS,UTF-8全部で書いてしまうのが確実。
こんな記述しなくて済む方法をご存知の方はこっそり教えていただけるとうれしいです。
関連ケースとして、mod_rewriteで以下の設定を行った場合も
RewriteRule ^/hoge/(.*)$ /cgi-bin/hoge.cgi?=$1 [L]http://example.com/hoge/%E3%83%86%E3%82%B9%E3%83%88
でアクセスした場合に、$1の中身は"%E3%83%86%E3%82%B9%E3%83%88"ではなく"テスト"になってしまうが、この場合はNEフラグを書いてやれば解決する。
RewriteRule ^/hoge/(.*)$ /cgi-bin/hoge.cgi?=$1 [NE,L]
タグ:Apache
コメント 0