Apacheの「%2F」問題を回避する

ApacheはURLに「%2F」が含まれていると404エラーを返す。

kawama.jp: PATH_INFOに「%2F」が含まれていると404エラーになる(AllowEncodedSlashesで解決)

“%2F”は、”/”(スラッシュ)をURLエンコードした物。これがあると、Apacheは404 Not Foundを返すそうな(もちろん、末尾のクエリ文字列にある分には問題ない)。回避策として、Apacheの設定でAllowEncodedSlashesをOnにするという手段があるそうだけど、バージョンは2.0.46以降でないと使えない。

もう一つの回避策としては、URLエンコードされた文字をさらにエンコードするという手段がある。つまり、「%2F」を「%252F」とする。

デジットさんの動的ページを静的ページに見せる2(PHP)

本サイトでは以前、タグページのURLを静的アドレスに見せかけるという変更を行ったけど、この際タグ名に「/」が含まれていると、上記の問題が発生するため、mod_rewriteが機能しなくなる。生憎現在使っているレンタルサーバは1.3.37だそうなので、1つめの回避策は最初から対象外。
そこで、Movable Tyep側でタグ名をURLエンコードした際、アドレスに含まれる”%2F”を置換える処理を追加した。具体的には、以下のようにする。

<$MTTagName encode_url="1"$>
↓
<$MTTagName encode_url="1" regex_replace="/%2F/","%252F"$>

これはMovable Type 4から追加された、「regex_replace」という出力値を正規表現で変換するモディファイアを利用している。
これにより、”%2F”→”%252F”という変換が行われる。この値をURLとして利用することで、上記の問題を回避することができる。


Posted by:

Posted At:

Modified At:

コメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください