我已经开始为我的网站使用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
的Web.config
<rewrite>
<rules>
<rule name="HOMETOSEO" stopProcessing="true">
<match url="Home\.aspx" />
<action type="Redirect" url="home" appendQueryString="false" />
</rule>
</rules>
</rewrite>
提前致谢
答案 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请求更加通用。