この記事について
| 環境 | Apache、PHP |
|---|---|
| 目的 | %2F(/)や%5C(\)を含むURLが404エラーになるのを回避する |
| 結果 | httpd.confにAllowEncodedSlashes onを追加する。いじれない場合は二重エンコードで回避 |
つまずきポイント要約
- %2Fや%5Cを含むURLの404はApacheのデフォルト設定によるもの
- AllowEncodedSlashesは.htaccessでは設定不可
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); //二回目。スラッシュだけエンコード値に置換。
