クライアントから「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 書き換え > 規則の追加 > 空の規則で、以下のように設定します。
コメント