IIS Url-Rewrite:URL无法识别

时间:2015-07-21 07:46:28

标签: iis url-rewriting

我正面临着URL-Rewrite模块的问题。

我想要实现的目标: 我有一个地址为" test-server"马上。输入URL时我想将URL更改为" test-server / de"或" test-server / en"通过{HTTP_ACCEPT_LANGUAGE}变量。 这应该只适用于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 个答案:

答案 0 :(得分: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},即匹配/资源网址。对于http://test-server匹配网址为空,因为未指定资源路径。但是,您应该只能从重定向网址中删除{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}

的值