URL将默认文档网页重写为SEO URL

时间:2012-07-12 12:21:36

标签: asp.net url-rewriting routing webforms

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

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

的Web.config

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

提前致谢

3 个答案:

答案 0 :(得分:1)

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

<强>的Web.config

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

<强> Global.asax中

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

public void BuildStaticRoutes(RouteCollection routes)
{
    //...
    routes.MapPageRoute("ROUTE-HOME", "home", "~/Home.aspx");
    //...
}

答案 1 :(得分: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。这就是你所追求的或反过来的吗?

答案 2 :(得分: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请求更加通用。