IIS Url-重写:URL 不会被识别

IIS Url-Rewrite: URL won't get recognized

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

我想达到的目标: 我现在有一个地址为 "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} 参数也是如此。

看这条规则...

<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)。

此外,您的重定向 URL 使用 {R:0},即 match/resource URL。对于 http://test-servermatch URL 为空,因为未指定资源路径。不过,您应该能够从重定向 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} 的值。