2015-07-21 73 views
0

我正在面對URL重寫模塊的問題。IIS Url-Rewrite:URL不會被識別

我想要達到的目標: 我有一個地址爲「test-server」的網站。當輸入URL時,我想通過{HTTP_ACCEPT_LANGUAGE}變量將URL更改爲「test-server/de」或「test-server/en」。 這隻適用於URL「test-server」,所以當用戶在像「test-server/de /」這樣的子頁面上時,他可以手動將URL改爲「test-server/en /」而不用重定向再次。

這是我有權知道:

<rewrite>   
     <rules>    
      <rule name="ToGermanPage" enabled="true" stopProcessing="true"> 
       <match url=".*" /> 
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
        <add input="{HTTP_ACCEPT_LANGUAGE}" pattern="^de" /> 
        <add input="{URL}" pattern=".+test-server" /> 
       </conditions> 
       <action type="Redirect" url="{R:0}/{HTTP_ACCEPT_LANGUAGE}" appendQueryString="true" /> 
      </rule> 
      <rule name="ToEnglishPage" enabled="true" stopProcessing="true"> 
      <match url="^test-server" /> 
       <action type="Redirect" url="http://test-server/en" /> 
       <conditions logicalGrouping="MatchAny" trackAllCaptures="false"> 
        <add input="{HTTP_ACCEPT_LANGUAGE}" pattern="^de" negate="true" /> 
       </conditions> 
      </rule> 
     </rules> 
</rewrite> 

我的問題是,如果我鍵入以下內容: 這將無法識別URL,同樣適用於條件內的{URL}參數。

回答

1

望着這條規則......

<match url=".*" /> 
<conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
    <add input="{HTTP_ACCEPT_LANGUAGE}" pattern="^de" /> 
    <add input="{URL}" pattern=".+test-server" /> 
</conditions> 
<action type="Redirect" url="{R:0}/{HTTP_ACCEPT_LANGUAGE}" appendQueryString="true" /> 

match url.*,它將匹配所有的資源。如果您只希望重定向工作爲http(s)://test-server/,則應指定一個空白資源(url="^$")。

您可以使用{HTTP_HOST}而不是{URL}來匹配您的主機名(無需擔心http/https)。

此外,您的重定向網址使用的是{R:0},這是匹配/資源的URL。對於http://test-server匹配 URL爲空,因爲沒有指定資源路徑。您應該只需從重定向網址中刪除{R:0}即可,因爲您只需要重定向到deen。因此,嘗試這樣的事情:

<match url="^$" /> 
<conditions> 
    <add input="{HTTP_HOST}" pattern="^test-server$" /> 
</conditions> 
<action type="Redirect" url="{HTTP_ACCEPT_LANGUAGE}" appendQueryString="true" /> 

這應該匹配http(s)://test-server並重定向到之一:

http(s)://test-server/en 

http(s)://test-server/de 

取決於{HTTP_ACCEPT_LANGUAGE}值。

+0

除了之外,這樣做了。當HTTP_ACCEPT_LANGUAGE ==「en-GB」時,它將重定向到「test-server/en-GB」,但其他人正是我所缺少的。 – ChrisK