IIS重写规则 - 隐藏目录(规则无法正常工作)

时间:2013-04-25 20:02:20

标签: iis redirect url-rewriting rewrite hide

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

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

例如:

www.mywebsite.com/uk/editions/ 

应该重写为

www.mywebsite.com/editions/

(删除目录UK)

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

英国主页位于此处。 (index.html

www.mywebsite.com/uk/

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

www.mywebsite.com 

而是显示www root 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>

1 个答案:

答案 0 :(得分: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时,它会匹配目录的物理路径,因此不会执行该规则。