我刚刚在我的IIS服务器上安装了IIS Url Rewrite 2.0,并且我在执行某些重写时遇到了一些麻烦。这是我的麻烦:
我希望将所有文件重写为:welcome.aspx> welcome /,about.aspx>关于/等实现我这样做:
<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>
到目前为止工作..但我在default.aspx上也有一些查询字符串函数我想要执行,当我运行这样的URL时:mysite.com/logout/其实是mysite.com/default.aspx ?action = logout由于这个规则:
<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中使用查询字符串函数的形式
我能以两种方式实现这两种目标吗?
::::::::::: EDITS ::::::::::::
我现在一整天都在尝试..我接近以下设置:
<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>
几乎一切正常
user.aspx&gt;用户
default.aspx?action = logout&gt;注销
user.aspx?action = comments&gt;用户/评论
如果我在用户之后添加斜杠,那么只会弄乱它。它将响应default.aspx规则并充当查询字符串..这不是意图..任何线索?
答案 0 :(得分:1)
您如何期望任何系统区分应该是页面名称的东西和作为参数的东西?
MVC网站在这里做什么 - 你的网址系统非常类似 - 是为了清楚地定义什么是什么。在您的情况下,您应该使用第一部分(welcome,about)作为视图 - 页面 - 部分并添加另一个代表该方法的级别。简而言之,使用/ default / logout并将其重写为类似
的内容{R:1}.aspx?action={R:2}
如果你真的想要像你所说的那样查看你的URL(/ logout没有/ default部分),你可以添加一个单独重写它们的规则(与OR |匹配)或添加一个重定向到的Logout.aspx Default.aspx?action = logout - 但这很难看。寻求干净的解决方案。