删除HTML或ASPX扩展

在托pipe的IIS7环境中,我正在寻找使用无扩展名文件名的最简单的方法。 简单地说,我有以下几页:

index.html(或.aspx) – > domain.com gallery.html – > domain.com/gallery videos.html – > domain.com/videos等…

我只有几页,我没有dynamic代码,没有什么特别的。 我发现的所有例子或者我在其他网站中使用的方法都围绕着dynamic内容,页面等。我只是寻找最简单的解决scheme,理想情况下不需要安装任何types的URL重写模块。 最好,我可以保留.html扩展名,而不是将网站转换为ASP.NET项目,但这是一个选项。

谢谢。

我结束了使用以下网站:

http://blogs.msdn.com/b/carlosag/archive/2008/09/02/iis7urlrewriteseo.aspx

http://forums.iis.net/t/1162450.aspx

或基本上下面的代码在我的web.config文件使用IIS7 URL重写模块,大多数托pipe网站现在提供(在这种情况下,我使用GoDaddy):

<system.webServer> <rewrite> <rules> <rule name="RewriteASPX"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="{R:1}.aspx" /> </rule> </rules> </rewrite> </system.webServer> 

另一个最简单的解决scheme,实现相同的:

把下列代码放到你的global.ascx文件中:

 void Application_BeginRequest(object sender, EventArgs e) { String fullOrigionalpath = Request.Url.ToString(); String[] sElements = fullOrigionalpath.Split('/'); String[] sFilePath = sElements[sElements.Length - 1].Split('.'); if (!fullOrigionalpath.Contains(".aspx") && sFilePath.Length == 1) { if (!string.IsNullOrEmpty(sFilePath[0].Trim())) Context.RewritePath(sFilePath[0] + ".aspx"); } } 

另一个更现代的方法是使用Microsoft.AspNet.FriendlyUrls。 在Global.asax.cs中添加:

 void Application_Start(object sender, EventArgs e) { // Code that runs on application startup RouteConfig.RegisterRoutes(RouteTable.Routes); 

并在RouteConfig文件中

 public static class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { var settings = new FriendlyUrlSettings(); settings.AutoRedirectMode = RedirectMode.Permanent; routes.EnableFriendlyUrls(settings); } 

如果你有dynamic代码,我认为最简单的做法就是把文件从.aspx重命名为.html,特别是如果你只有less量的页面。 没有简单的方法来做到这一点,而不必重写URL。

但是,使用IIS 7,您可以使用HTTP模块轻松进行设置。 Scott Guthrie解释得很好 在这篇文章中,他展示了几种定制URL的方法。 我认为,你想方法#3最好的。

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

我没有足够的评论意见,这是改善Pawan M的答案。 他的意志工作,除非你有页面上使用查询string。 我已经修改了Pawan的代码来允许查询string,更不用提我的vb版本了。

检查以确保您的项目中有一个Global.asax.vb文件。 如果它不这样做添加一个项目:

文件 – >新build – >文件 – >全局应用程序类

在你的项目的Global.asax文件中添加这个函数:

 Sub Application_BeginRequest(sender As Object, e As EventArgs) Dim fullOrigionalpath As [String] = Request.Url.ToString() Dim sElements As [String]() = fullOrigionalpath.Split("/"c) Dim sFilePath As [String]() = sElements(sElements.Length - 1).Split("."c) Dim queryString As [String]() = sElements(sElements.Length - 1).Split("?"c) If Not fullOrigionalpath.Contains(".aspx") AndAlso sFilePath.Length = 1 Then If Not String.IsNullOrEmpty(sFilePath(0).Trim()) Then If queryString.Length = 1 Then Context.RewritePath(sFilePath(0) + ".aspx") Else Context.RewritePath(queryString(0) + ".aspx?" + queryString(1)) End If End If End If End Sub 

您可以在c#中使用ASP.NET中的URL中的自定义扩展。

让代码中的“.recon”是您的自定义扩展。 (即将“.recon”replace为您自己的扩展名)

 protected void Application_BeginRequest(object sender, EventArgs e) { HttpApplication app = sender as HttpApplication; if (app.Request.Path.ToLower().IndexOf(".recon") > 0) { string rawpath = app.Request.Path; string path = rawpath.Substring(0, rawpath.IndexOf(".recon")); app.Context.RewritePath(path+".aspx"); } }