mod_rewriteでの%2F問題2008.01.24コピーしましたPRmod_rewriteを使う場合、URLに「%2F」が含まれるとApacheの設定によっては思い通りに動作しない可能性があります。mod_rewriteについては第15回のメーリングリストを参照していただくとして、まずは以下のようなURLを考えてみましょう。http://example.com/search/keyword%2Fkeywordここでは、以下のようなルールで変換を行うとします。[L]また、search.phpはmod_rewriteの動作確認用に、以下のような簡単なコードを使用するとします。$_GET['q'];?>先ほどのURLにアクセスした場合、search.phpを呼び出して「keyword%2Fkeyword」のデコード結果を出力することが期待されます。実際にアクセスしてみると404エラーが発生してしまいます。エンコードを行っていない状態の「/」を含んだ、http//example.com/search/keyword/keywordというURLでアクセスしてみると、今度はうまくいくはずです。このような問題が起きるかというと、ApacheではURLにパスの分離文字である「/」をURLエンコードした「%2F」が含まれると404エラーで拒否してしまうからです。GETの値として「%2F」が含まれる場合は、問題なくアクセスすることができます(http://example.com/search.php?q=keyword%2Fkeyword)。Apacheの設定を変更することで、404エラーを発生させずに、mod_rewriteの処理エンジンを実行することができます。2.0.46以降でないと設定用のディレクティブが存在しないので注意が必要です。2.0.46より古いバージョンの場合は、アプリケーション側で変数のエンコード後に「%2F」のみさらに置換するなどの工夫が必要になるでしょう。(httpd.conf等)でAllowEncodedSlashesディレクティブをOnにします。Onこうすることで、「%2F」が含まれるURLにアクセスしてもmod_rewriteの条件判定が行われ、期待されるファイルが実行されます。「%2F」が含まれるURLにアクセスできないという問題は、PATH_INFOを使用する場合でも同様に起こります。こちらについてもAllowEncodeSlashesディレクティブをOnにすれば問題なく動作させることができます。この問題は意外と知られていないかもしれませんが、一旦はまると中々抜け出せなくなるので注意が必要です。森川穣)この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。現場の負担軽減を!医療界でのAWS活用法500万社が導入。き》データサイエンティスト育成で定評のある大阪ガスと、データ分析の専門家が共同で開発した特別プログラ...SEのための「システム営業力」養成講座SEとして仕事をする方が、顧客や経営層に対する提案力や会話力を身につけるための講座です。情報銀行の成り立ち、事例、現状課題やその行方を網羅。経営戦略である以上、「会計」の知識やスキルが欠かせません。