エンコードされたURLが%2Fや%5Cが含むと404エラーになる場合の回避法

URL変更など、mod_rewrite でURLを渡す時、「%2F」や「%5C」が含まれると404エラーが返ってくる。Apacheのデフォルト設定である。

「%2F」は「/(スラッシュ)を、%5Cは「\(バックスラッシュ)」をエンコードしたもの。
これらの文字を含んだURLで404エラーなる場合は、AllowEncodedSlashesを設定することでURLの使用可否を変更する。

httpd.confに追加する(.htaccessでは不可)
---------------------------
AllowEncodedSlashes on
---------------------------
エンコードされた「/」や「\」を含むURLの使用が許可される。

レンタルサーバーなどでhttpd.confをいじれない場合は、「/」や「\」を二重にエンコードすることでとりあえず回避できる。

「/」を二重にエンコードする例
---------------------------
$url = urlencode($url); //一回目のエンコード
$url = str_ireplace("%2f","%252f",$url); //二回目。スラッシュだけエンコード値に置換。
---------------------------