BLOGTIMES
2010/11/08

URLに「%2F」が入ると404 エラーが出るときは?

  httpd 
このエントリーをはてなブックマークに追加

Apache2で特定のURLで予期せず404エラーが出ることが分かったのですが、その再現条件の特定かなり手間取ってしまったので後学のためにメモ。
再現条件はPATH_INFOを有効にしていて、PATH_INFOの部分に%2F入っている場合でした。
この「 %2F 」というのはデコードしてやると 「 / 」になります。これは意外とメジャーな問題のようで、ググってみるとたくさん解決方法がでてきました。

70. mod_rewriteでの%2F問題 - PHP TIPS:ITpro

なぜこのような問題が起きるかというと、ApacheではURLにパスの分離文字である「/」をURLエンコードした「%2F」が含まれると404エラーで拒否してしまうからです。
なお、GETの値として「%2F」が含まれる場合は、問題なくアクセスすることができます

ポイントはPATHの部分はダメだけれども、 Query string としては許されるというところでしょうかね。
詳細はマニュアルの「AllowEncodedSlashes ディレクティブ」にありますが、とりあえずApacheの設定に下記を加えてあげればOKでした。

AllowEncodedSlashes On

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3896
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン