2015-07-21 72 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