子目录URL自动重写规则?

时间:2012-04-25 18:50:02

标签: asp.net vb.net iis-7 url-rewriting

我正在使用ASP.NET 4 / VB.NET / IIS来构建Web应用程序。人们将通过如下URL访问Web应用程序:

  

http://url.com/personname

因此,例如,这里分别是Jane Doe,John Doe和James Doe的网址:

  

http://url.com/janedoe

     

http://url.com/johndoe

     

http://url.com/jamesdoe

我需要以某种方式将它们(无论输入什么名称)传递给default.aspx页面,然后该页面将引入URL的名称部分并使用它来对包含信息的数据库执行查找。关于这个特定的人,并根据该信息显示个性化页面。

因此,例如,Jane Doe访问:

  

http://url.com/janedoe

她被透明地重定向到default.aspx,它会输入她的名字(来自上面的url)并对照数据库进行检查。看到她以前从未访问过这个网站,她被透明地重定向到welcome.aspx,要求她注册一个账号,“Hello Jane!”等等...

下次Jane访问时她会去:

  

http://url.com/janedoe

她被透明地重定向到default.aspx,它会输入她的名字(来自上面的url)并对照数据库进行检查。看到她之前访问过并创建了一个帐户,她被透明地重定向到login.aspx,要求她输入她上次创建的身份验证凭据。

1 个答案:

答案 0 :(得分:1)

首先,您需要重写对Default.aspx的请求。根据您的IIS版本(以下是IIS 7.5),这很简单。在web.config中,规则(在system.webServer部分中)类似于

<rewrite>
    <rules>
        <rule name="test" enabled="true" stopProcessing="false">
            <match url="^([a-zA-Z]*)$" />
            <action type="Rewrite" url="Default.aspx?u={R:1}" />
        </rule>
    </rules>
</rewrite>

(或者您可以使用IIS管理器)。当然,正则表达式[a-zA-Z]应该适合您的业务规则 - 您可能希望允许数字。

重写IIS中的请求 - 在浏览器中看不到任何内容。现在你想“透明地重定向”它,这意味着浏览器中的URL应该根据用户是否已经存在而改变。

要实现这一点,在后面的Default.aspx代码中处理Request.QueryString [“u”],请按照

进行操作
Response.Redirect("Welcome.aspx") or
Response.Redirect("Login.aspx")

取决于数据库查询结果。如果您不想更改浏览器URL,请使用Server.Transfer而不是Response.Redirect。