在IIS7中計算機名稱不是內置服務器變量之一。然而,所有這些都不會丟失,通過使用自定義UrlRewrite提供程序的一些工作,您可以在重寫規則中顯示機器名稱。
斯科特·福賽思實際上已建成這樣的事情已經和寫博客文章描述了它的使用,並提供了源和預建的二進制+安裝程序:
URLRewrite ServerNameVariable Provider
對於爲了在這篇文章消失的情況下保留這些信息的步驟大致如下:
首先在Visual Studio中創建一個新的類庫項目。你可以找到的步驟在這裏做到這一點:
Developing a Custom Rewrite Provider for URL Rewrite Module (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 Strong Name Utility Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Public key token is 5854ff76fb5c07af
接下來要做的是使用新的供應商在重寫規則,例如,這裏的斯科特給的例子是出站規則:
<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>
來源
2012-08-05 00:52:07
Kev