2

我在这个网站的帮助下构建了一个重写规则。但我仍然有一个小问题。

我的目标是从 URL 中删除某个目录。

例如:

www.mywebsite.com/uk/editions/ 

应该重写为

www.mywebsite.com/editions/

(删除目录英国)

上述方案现在适用于所有 URL,除了一个。

英国主页实际上位于此处。( index.html)

www.mywebsite.com/uk/

正确的重写规则应将 URL 显示为

www.mywebsite.com 

相反,它显示的是 www 根目录index.html而不是uk/index.html页面。

但是如果我像这样在 URL 中指定索引页面

www.mywebsite.com/uk/index.html

它正确地将 URL 重写为

www.mywebsite.com 

并显示英国索引页面而不是 www 根索引页面。

我使用的规则如下:

<rule name="Hide UK Directory in URL" enabled="true" stopProcessing="true">
    <match url="^uk$|^uk/(.*)$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^www\.mywebsite\.com$" />
    </conditions>
    <action type="Redirect" url="{R:1}" logRewrittenUrl="true" />
</rule>

<rule name="Rewrite the URL after UK is hidden" enabled="true" stopProcessing="true">
    <match url="^(?!uk)(.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^www\.mywebsite\.com$" />
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="uk/{R:1}" logRewrittenUrl="true" />
</rule>
4

1 回答 1

0

这个问题来自您拥有的第二条规则(Rewrite the URL after UK is hidden)。

在您的条件下,您有:

<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />

这两行意味着,如果请求的 URL 与文件或目录的物理路径匹配,它将不会执行重写。

当您请求www.mywebsite.com时,它会匹配目录的物理路径,因此不会执行该规则。

于 2013-04-29T19:54:46.593 回答