C# IIS url重写default.aspx和其他文件

C# IIS url重写default.aspx和其他文件,c#,asp.net,iis,url-rewriting,webforms,C#,Asp.net,Iis,Url Rewriting,Webforms,我刚刚在我的IIS服务器上安装了IIS Url Rewrite 2.0,在正确执行某些重写时遇到了一些问题。我的问题是: 我希望将我的所有文件重写为:welcome.aspx>welcome/、about.aspx>about/等,以实现以下目的: <rule name="Remove extension with slash" stopProcessing="true"> <match url="(.*)/" /> <conditions>

我刚刚在我的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>

到目前为止,这是有效的。。但是我在default.aspx上也有一些querystring函数,当我运行这样的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文件,该文件仅以my default.aspx中querystring函数的形式存在

我有什么办法可以同时做到这两个呢

:编辑:

我已经试了一整天了。。我非常接近以下设置:

<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>user

default.aspx?action=logout>logout

user.aspx?操作=注释>用户/注释


唯一搞砸的是,如果我在用户ie之后添加斜杠,它将响应default.aspx规则并充当查询字符串。。这不是有意的。。有什么线索吗?

你怎么能期望任何系统区分一个应该是页面名的东西和一个意味着参数的东西

MVC站点在这里要做的是——你的URL系统与之非常相似——清楚地定义什么是什么。在您的情况下,您应该使用第一部分(welcome,about)作为视图-页面-部分,并添加另一个表示该方法的级别。简而言之,使用/default/logout并将其重写为

{R:1}.aspx?action={R:2}

如果你真的想像你所说的那样查看你的URL(/logout不带/default部分),你可以添加一个单独重写它们的规则(与OR |匹配),或者添加一个logout.aspx重定向到default.aspx?action=logout,但那会很难看。使用干净的解决方案。

您如何期望任何系统能够区分应该是页面名称的内容和作为参数的内容

MVC站点在这里要做的是——你的URL系统与之非常相似——清楚地定义什么是什么。在您的情况下,您应该使用第一部分(welcome,about)作为视图-页面-部分,并添加另一个表示该方法的级别。简而言之,使用/default/logout并将其重写为

{R:1}.aspx?action={R:2}

如果你真的想像你所说的那样查看你的URL(/logout不带/default部分),你可以添加一个单独重写它们的规则(与OR |匹配),或者添加一个logout.aspx重定向到default.aspx?action=logout,但那会很难看。使用干净的溶液。

完全使用干净的溶液。怎样才能做到呢?有任何参考资料吗?我到处都在找:)完全在寻找干净的解决方案。怎样才能做到呢?有任何参考资料吗?到处都找过:)