IISでのURLの書き換え

iis-url-rewriteのアイキャッチ画像 Windows

クライアントから「http://<ip>:<port>/hoge」のようなURLをリクエストされたときに、サーバー側で所定のCGIファイル(e.g. C:\temp\index.php)を実行したい場合があります。

このようなURLの書き換えをしたい場合、IISでは「URL Rewrite Module」を使います。

URL Rewrite Moduleのインストール

URL Rewrite ModuleはIISのプラグインであるため、まずはこちらから「rewrite*.msi」をダウンロードして下さい。

GUIでインストールする場合、上記MSIファイルを実行し、インストールを完了させます。
IISマネージャーで、以下のように「URL 書き換え」が見えていればOKです。


Powershellなどのシェルでサイレントインストールしたい場合、以下のコマンドを実行します。

msiexec.exe /qn /i <rewrite.msiのフルパス>

以下を実行すると、正常にインストールされていることを確認できます。

Get-WmiObject Win32_Product | Select-Object Name,Vendor,Version,Caption | ForEach-Object {if($_.Name -like "*rewrite*"){ Write-Host $_ }}
# "*IIS URL Rewrite Module*"が表示されればOK。

URL Rewrite Moduleのインストールに失敗する場合

URL Rewrite Moduleのインストーラーのバグで、IISのバージョンを誤検知してインストールが失敗することがあります。
その場合、レジストリ「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp」のMajarVersion「0x0000000a (10)」を、「0x00000009 (9)」に書き換える必要があります。

Powershellでは、以下のように実行できます。

Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp
# MajorVersionが10である場合は以下を実施。
Set-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp -Name MajorVersion -Value 9

URL Rewriteの設定

URL Rewrite機能の設定例です。
例えばクライアントから「http://<ip>:<port>/api/functions」とリクエストされた場合に(”api”は固定、”functions”は可変)、「<ドキュメントルート>/cgi-bin/index.php」を実行したいとします。
IISマネージャー > 所定のサイト > URL 書き換え > 規則の追加 > 空の規則で、以下のように設定します。

コメント

タイトルとURLをコピーしました