1

我已经开始为我的站点使用 ASP.NET 路由。我一直在通过 Global.asax 文件中的 Application_Start() 注册路由。

IE

routes.MapPageRoute("ROUTE-ABOUT", "about", "~/About.aspx");
routes.MapPageRoute("ROUTE-CONTACT", "contact", "~/Contact.aspx");
//etc...

这非常适用于“关于”和“联系”页面。

我想要的是:

我的主页是 Home.aspx,我想做的是重写任何访问过的人

http://localhost/mysite.com/Home.aspx 

http://localhost/mysite.com/Home 

我试过的

  • 我的站点在我的机器上的本地 IIS v7.5 中运行(完全管理员权限)。
  • 我已将以下内容添加到我的 Web.config

网页配置

<rewrite>
    <rules>
        <rule name="HOMETOSEO" stopProcessing="true">
            <match url="Home\.aspx" />
            <action type="Redirect" url="home" appendQueryString="false" />
        </rule>
    </rules>
</rewrite>

提前致谢

4

3 回答 3

1

经过数小时的尝试使其工作后,我最终设法使用文件Web.config和文件中Application_Start()的以下条目使其工作Global.asax

网页配置

<rewrite>
    <rules>
        <rule name="default" enabled="true" patternSyntax="ECMAScript" stopProcessing="false">
            <match url="(.*)Home\.aspx" ignoreCase="true" />
            <action type="Redirect" url="home" appendQueryString="false" />
        </rule>
        <rule name="lower" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
            <match url="[A-Z]" ignoreCase="false" />
            <action type="Redirect" url="{ToLower:{URL}}" /> 
        </rule>
    </rules>
</rewrite>

全球.asax

protected void Application_Start(object sender, EventArgs e)
{
    //...
    BuildStaticRoutes(RouteTable.Routes);
    //...
}

public void BuildStaticRoutes(RouteCollection routes)
{
    //...
    routes.MapPageRoute("ROUTE-HOME", "home", "~/Home.aspx");
    //...
}
于 2012-07-12T15:10:36.963 回答
0

如果您使用的是 IIS v7.5,您可以在 web.config 中添加它

<system.webServer>  
<rewrite>
            <rules>                
                <rule name="HOMETOSEO" stopProcessing="true">
                    <match url="^Home" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="Home.aspx" />
                </rule>
            </rules>
</rewrite>
</system.webServer>  

当您键入http://mysite.com/Home时,它会显示http://mysite.com/Home.aspx。那是你所追求的还是相反?

于 2012-07-12T12:43:52.877 回答
0

您可以通过从 RouteBase 继承使用自定义路由来执行此操作 - 所以在您的情况下,它看起来像这样

public class HomeRoute : RouteBase
{
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        if (httpContext.Request.Url.ToString().ToLower().Contains("home.aspx"))
        {
            httpContext.Response.Status = "301 Moved Permanently"; //Optional 301 redirect
            httpContext.Response.RedirectLocation = "Home";
            httpContext.Response.End();
        }

        return null;
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        return null;
    }
}

然后在您注册路线时,您将拥有

routes.Add("HomeUrl", new HomeRoute());

因此,对 /Home.aspx 的任何请求都会自动重定向到 /Home - 显然,通过一些额外的工作,您可以使任何 .aspx 请求更通用。

于 2012-07-12T13:12:13.337 回答