気まぐれメモランダム / でたらめフィードバック

サーバー変数"REQUEST_URI"の参照はIISでURL書き換えを利用するときは避ける

公開: / 最終更新日:

日本語の情報がほとんどないようなのでメモ。次の環境でWebアプリケーションを動作させているとき:

  • Windows 7
  • IIS Express
  • PHP
  • URL書き換え設定あり

サーバー変数"REQUEST_URI"設定値にURLエンコードされた値が含まれていると、その値はデコードできない値になります。

たとえばURLに「作品("\u4F5C\u54C1)」という文字列を含めたとしましょう。UTF-8でURLエンコードすると次の表現になります:

%E4%BD%9C%E5%93%81

しかしサーバー変数"REQUEST_URI"に設定される値は次になります:

%8D%EC%95i

……元の値は影もかたちもありません。つまりここからの値の取得は 不可能 ということです。

バグと表現してよいであろうこの現象はどうもURL書き換えモジュールの処理と関係があるようで、URL 書き換えモジュール構成のリファレンスで触れられているサーバー変数"UNENCODED_URL"を参照すると回避できます。このサーバー変数がApacheやNginxなどで設定されるとは思えませんし、IISでも環境によって設定にばらつきがありそうですから、"UNENCODED_URL"が存在するときはそちらを、存在しないときは"REQUEST_URI"を参照するようにするとよいでしょう。

以上、最新のIISやAzure App Service等では解消されているのかもしれませんが、備忘録代わりということで。

関連コンテンツ

Pick up work

最近のエントリ

アーカイブ

ブログ情報