ApacheのAllowEncodedSlashesをOnにして、URLに「%2F(スラッシュ)」があっても404エラーにならないようにする。

Apacheのデフォルトは、URLに「/(スラッシュ)」のURLエンコード文字列「%2F」があると、「404Not found」を返す設定になっています。(AllowEncodedSlashesがOff)

AllowEncodedSlashes ディレクティブは符号化された パス分離文字 (/ は %2F、さらにシステムによっては \ に対応する %5C) が存在する URL の使用を 許可するかどうかを決定します。通常はそのような URL は 404 (Not found) エラー で拒否されます。

core – Apache HTTP サーバ

この設定は、AllowEncodedSlashesディレクティブをOnにすることで、404エラーを返さないように変更することができます。

具体例

例えばmod_rewriteを使って

RewriteEngine On
RewriteRule ^word/(.+) word_dir/word.php?word=$1 [L]

のような設定を行っているとして、

$url = "http://example.com/word/" .urlencode("iPhone/Android");

のURLは、デフォルトのままでは、「404 Not found」になってしまいます。

これを、

# vi /etc/httpd/conf.d/vhost.conf

の該当ホストで、

AllowEncodedSlashes On

と設定することで、「404 Not found」を返さなくなるので、

$word = htmlspecialchars($_GET['word']);

という感じで、通常どおりにスラッシュ付きの文字列を扱うことができるようになります。

カテゴリー: サーバ・インフラのこと   タグ: ,   この投稿のパーマリンク

トラックバック

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>