IISで「HTTP エラー 405.0 - Method Not Allowed」になる場合の対処法

IIS(7.5)で、
HTTP エラー 405.0 - Method Not Allowed

無効なメソッド (HTTP 動詞) が使用されているため、検索しているページを表示できません。

というエラーが出る場合があります。

下記画像のように、エラー情報の詳細には、「モジュール StaticFileModule」「通知 ExecuteRequestHandler」「ハンドラー StaticFile」「エラーコード 0x800700001」などと表示されています。



そもそも、このエラーの原因は、IISの設定でPOSTメソッドが認められていない静的なファイル(テキストファイル・HTMLファイル・JSONファイル・PDFファイルなど)に対してPOSTメソッドでアクセスしている際に起こります。何でHTMLファイルやPDFファイルにPOSTする必要があるのかと思うでしょうが、AJAX全盛時代にあって、実に多くの人がこの問題にぶち当たっていることは、Googleで少し検索すればすぐにわかりますから、決して稀なニーズではないと考えられます。キャッシュ対策もその理由の一つかもしれません。

この場合の対処法については、Googleで検索すると実に多くのサイトで紹介はされているのですが、当方ではやり方が悪いのかどれもうまくいきませんでした。Apacheでは全く起こらない問題であるだけに厄介です。

ただ、あるサイトの説明を参考にして、下記のようにすることで、うまく解決できることができました。参考にしてください。

1.IISマネージャーを起動して、対象のアプリケーションを選択してください。「ハンドラーマッピング」のアイコンをクリックしてください。

 ディレクトリーはPOSTする側ではなく、POSTメソッドの結果表示される「HTMLファイルやテキストファイル、PDFファイル」のディレクトリーを基準に選んでいただく必要がありますが、この例では、DocumentRootを選び、アプリケーション内の全ディレクトリーに影響する設定にしてあります。

2. ハンドラーマッピングの画面が開いたら、右側のペインにあります「スクリプトマップの追加」というリンクをクリックしてください。
3. スクリプトマップの追加画面が表示されます。
4.
要求パスに「*.pdf」を入力してください。拡張子「.pdf」の場合の処理を決定します。ここで実行ファイルの選択を何にするかが問題なのですが、CGI版PHPのexe(php-cgi.exe)を指定します。まだ、CGI版PHPをインストールしていない場合は、後述する方法を参照してください。

「名前」のところは適当な名称を入力してください。「要求の制限」のところは適宜編集してもらったら良いですが、POSTを許可するようにしてください。「要求の制限」は編集しなくても(デフォルトのままでも)動きます。

5. 下記のようなweb.configが追加されているのを確認できたら、成功です。


1. PHPのサイトからWidnows版PHPをダウンロードします。

PHP 5.4
(5.4.15)
VC9 x86 Thread Safe
(2013-May-08 22:51:34)
一部のPDFファイル(WEB上の任意のPDFファイル100個中5つぐらい。)でInternal Server Errorになりますので、お勧めできません。どのようなPDFファイルの場合にそうなるのかも不明です。お勧めできません。
PHP 5.3 (5.3.25)VC9 x86 Thread Safe
(2013-May-08 19:29:15)
○問題ありません。
PHP 5.2 (5.2.17)VC6 x86 Thread Safe
(2011-Mar-22 13:29:30)
○問題ありません。
PHP 5.2 (5.2.14)php-5.2.14-Win32.zip(2010年9月頃ダウンロード)○問題ありません。
2. zipファイルを解凍後、php.ini-productionもしくはphp.ini-recommendedを開き、php.iniとして別名保存します。

続いて、
; cgi.force_redirect = 1
という行を探します。だいたい550行目ぐらいにありますが、「force_redirect」でファイル内を検索すれば比較的すぐに見つかります。

この行を
cgi.force_redirect = 0
に書き換えます。「;」で始まる行はphp.iniでは、コメント扱いですが、このセミコロンを外して、かつイコールの右辺を1から0に変えてください。これでphp.iniの編集は終わりです。
3. 実際にPHPの実行のために使用したい場合は、ハンドラーマッピングの画面からPHPに関するスクリプトマップの編集を行ってください。

また、本ページの本題であるHTMLファイルやPDFファイルのような静的なコンテンツをPOSTで表示できるように、実行ファイルとしてCGI版PHPを指定してください。



←← PDF保存対策ソフト「PDF No Save」HTMLモード
(Android携帯への対応はアルファ版です。)
  © 株式会社プランセス