IIS7 では、コンピューター名は組み込みサーバー変数の 1 つではありません。ただし、すべてが失われるわけではありません。カスタム UrlRewrite プロバイダーを使用して少し作業すれば、書き換えルールでマシン名を表示できます。
Scott Forsyth は実際にこのようなものを既に作成しており、その使用法を説明するブログ投稿を書き、ソースとビルド済みのバイナリ + インストーラーを提供しています。
URLRewrite ServerNameVariable プロバイダー
その記事がここに消えた場合にこの情報を保持するために、大まかな手順は次のとおりです。
まず、Visual Studio で新しいクラス ライブラリ プロジェクトを作成します。これを行う手順は次のとおりです。
URL 書き換えモジュール (IIS.NET) 用のカスタム書き換えプロバイダーの開発
それらは本質的に次のとおりです(リンクが切れた場合):
クラス ライブラリ プロジェクトを作成し、ServerNameProvider
. プロジェクトが .NET 2.0 または 3.5 プロジェクトであることを確認する必要があります。IIS7.5 マネージ コードのサポートは、依然として 2.0 ランタイムを対象としています。
デフォルトClass1.cs
ファイルの名前を、プロバイダの目的を反映した名前に変更します。たとえば、次のServerName.cs
ようにします。ソース内のクラス名にもこれが反映されていることを確認してください。
への参照を追加: %ProgramFiles%\Reference Assemblies\Microsoft\IIS\Microsoft.Web.Iis.Rewrite.dll
。
プロジェクトのプロパティで、厳密な名前のキーを作成します (署名タブで)
ビルド後のイベントを追加して、開発用 PC GAC にプロバイダー アセンブリをインストールします (テスト用のみ)。
CALL "%VS90COMNTOOLS%\vsvars32.bat" > NULL
gacutil.exe /if "$(TargetPath)"
Visual Studio 2010 を使用している場合は、環境変数%VS90COMNTOOLS%
を に変更する必要があります%VS100COMNTOOLS%
。
ファイルを開き、クラスがインターフェイスをServerName.cs
実装していることを確認します。Microsoft.Web.Iis.Rewrite.IRewriteProvider
using System.Collections.Generic;
using Microsoft.Web.Iis.Rewrite;
namespace ServerNameVariable
{
public class ServerName : IRewriteProvider
{
public void Initialize(IDictionary<string, string> settings,
IRewriteContext rewriteContext)
{
}
public string Rewrite(string value)
{
return System.Environment.MachineName;
}
}
}
プロジェクトをビルドします。ローカル PC では、アセンブリが GAC にインストールされます。
プロバイダーを IIS に登録します。
appcmd.exe set config -section:system.webServer/rewrite/providers /+"[name='ServerNameVariable',type='ServerNameVariable.ServerName, ServerNameVariable, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5854ff76fb5c07af']" /commit:apphost
PublicKeyToken
上記のコマンド ラインの値が、アセンブリの公開キー トークンと一致していることを確認してください。を実行してその値を抽出できますsn.exe -T <assemblyfile.dll>
。次に例を示します。
e:\AppDev\..bin\Debug> sn.exe -T ServerNameVariable.dll
Microsoft (R) .NET Framework ストロング ネーム ユーティリティ バージョン 4.0.30319.1
Copyright (c) Microsoft Corporation. 全著作権所有。
公開鍵トークンは 5854ff76fb5c07af です
次に行うことは、書き換えルールで新しいプロバイダーを使用することです。たとえば、Scott が示したアウトバウンド ルールの例を次に示します。
<outboundRules>
<rule name="Set Custom Header" enabled="true">
<match serverVariable="RESPONSE_X_Machine_Name" pattern=".*" />
<action type="Rewrite" value="{ServerNameVariable:}" />
</rule>
</outboundRules>
マシン名が の場合に google.com にリダイレクトする単純なインバウンド ルールを次に示しますBOB
。
<rewrite>
<rules>
<rule name="TestServerVariableProvider"
enabled="true"
stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{ServerNameVariable:}" pattern="BOB" />
</conditions>
<action type="Redirect"
url="http://google.com"
appendQueryString="false"
redirectType="Found" />
</rule>
</rules>
</rewrite>