2013-03-03 73 views
1

我在我的web.configIIS 7的web.config改寫指令serverVariables在子文件夾不工作

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="IP Correction"> 
        <match url="(.*)" /> 
        <serverVariables> 
         <set name="REMOTE_ADDR" value="{HTTP_X-Forwarded-For}"/> 
        </serverVariables> 
        <action type="None" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

這工作完全在我的網站的根目錄下面的代碼,但是,規則是不在任何子文件夾中被觸發。

回答

2

我想通了。問題是在這行代碼

<action type="None" /> 

您必須指定重寫動作

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="IP Correction"> 
        <match url="(.*)" ignoreCase="true" /> 
        <serverVariables> 
         <set name="REMOTE_ADDR" value="{HTTP_X-Forwarded-For}" replace="true"/> 
        </serverVariables> 
        <action type="Rewrite" url="{R:0}" appendQueryString="true" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 
+0

你不應該需要設置因爲您不想重寫URL,所以要「重寫」這個操作。但是,URL重寫有一個錯誤,它不會總是爲默認文檔執行。有關解決方法,請參閱下面的答案。 – 2017-03-10 03:27:11

1

我遇到類似的問題,並創建了一個IHttpModule的,解決它,你可以find here。 URL重寫似乎有一個錯誤,它不會執行默認的文檔請求。該模塊沒有這個問題。要在您的站點上實現它,您需要將它添加到web.config的<modules>部分,或者如果您希望它在服務器範圍內運行,請將其添加到applicationHost.config。

的代碼相關的一點是,你鉤住的HttpApplication的BeginRequest事件,並運行:

void OnBeginRequest(object sender, EventArgs e) 
{ 
     HttpApplication app = (HttpApplication)sender; 

     string headervalue = app.Context.Request.Headers["X-Forwarded-For"]; 

     if (headervalue != null) 
     { 
       Match m = REGEX_FIRST_IP.Match(headervalue); 

       if (m.Success) 
       { 
         app.Context.Request.ServerVariables["REMOTE_ADDR"] = m.Groups[1].Value; 
         app.Context.Request.ServerVariables["REMOTE_HOST"] = m.Groups[1].Value; 
       } 
     } 
} 

的正則表達式是^\s*(\d+\.\d+\.\d+\.\d+)。完整代碼在the gist

如果您編譯此代碼到類庫稱爲的HttpModules並把它放在你的GAC,那麼你可以添加到您的<modules>部分,是這樣的:

<add name="ClientIP" type="YourLibrary.ClientIP, YourLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=00DEADBEEF00" />