我刚刚在我的 IIS 服务器上安装了 IIS Url Rewrite 2.0,我在正确执行一些重写时遇到了一些麻烦。这是我的麻烦:
我希望我的所有文件都被重写为:welcome.aspx > welcome/、about.aspx > about/ 等,以实现我正在这样做:
<rule name="Remove extension with slash" stopProcessing="true">
<match url="(.*)/" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}.aspx" appendQueryString="true" />
</rule>
到目前为止,这是可行的..但是当我运行这样的 URL 时,我还想在 default.aspx 上执行一些查询字符串函数: mysite.com/logout/ 这实际上是 mysite.com/default.aspx?action=由于此规则而注销:
<rule name="Friendly URL" stopProcessing="true">
<match url="(.*)/" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="default.aspx?action={R:1}" appendQueryString="true" />
</rule>
但它不会执行第二条规则,因为它将查找不存在的 logout.aspx 文件,仅以我的 default.aspx 中的查询字符串函数的形式
有什么办法可以同时实现吗?
::::::::::: 编辑 :::::::::::::
我一直在尝试一整天..我非常接近以下设置:
<rule name="Remove ext" stopProcessing="true">
<match url="^([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}.aspx" matchType="IsFile" negate="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}.aspx" appendQueryString="true" />
</rule>
<rule name="Default actions" stopProcessing="true">
<match url="^([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="default.aspx?action={R:1}" appendQueryString="true" />
</rule>
<rule name="Other files with querystrings" stopProcessing="true">
<match url="^([^/]+)/([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}.aspx?action={R:2}" appendQueryString="true" />
</rule>
几乎一切正常
用户.aspx > 用户
default.aspx?action=logout > 注销
user.aspx?action=comments > 用户/评论
唯一搞砸的是,如果我在用户 ie 之后添加一个斜杠。它将响应 default.aspx 规则并充当查询字符串.. 这不是有意的.. 有什么线索吗?