2010-12-19 121 views
29

在托管的IIS7环境中,我正在寻找使用无扩展名文件名的最简单方法。只要我有以下网页:删除HTML或ASPX扩展

的index.html(或的.aspx) - > domain.com gallery.html - > domain.com/gallery videos.html - > domain.com/videos etc ...

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

谢谢。

+0

参考这个答案它工作得很好 [删除的.aspx形成的所有页面] [1] [1]:HTTP: //stackoverflow.com/a/15240694/1265997 – cwishva 2013-03-06 06:47:04

+0

请访问此链接http://stackoverflow.com/questions/2170745/what-are-pros-to-use-extension-less-url – 2010-12-19 06:11:01

回答

45

我结束了使用以下网站:

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

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

或基本上在我的web.config文件中的以下代码使用IIS7网址重写模块,大多数托管网站现在提供(在这种情况下,我是usin摹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> 
+12

感谢这个出色的解决方案。为了澄清,上面的XML在web.config的元素中。 – 2013-01-02 17:40:23

+0

刚刚救了我的生命+1 – 2014-10-21 17:21:09

1

如果您有动态代码,我认为最简单的做法是将文件从.aspx重命名为.html,尤其是如果您只有少数几页时。没有简单的方法来做到这一点,而不必重写网址。

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

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

+0

谢谢,但这个想法是彻底摆脱扩展。不要从HTML> ASPX重命名它们,反之亦然。 ScottGu的帖子有点过时了,但确实有一些有用的,但是比我寻找信息更复杂。 – roadsunknown 2010-12-29 09:39:54

+0

该链接中提供的信息告诉你如何删除扩展,如果你看看方法3.这里的说明描述了_current_进程去除IIS7的扩展,即使它是2007年编写的。 – dontangg 2010-12-29 15:28:43

5

实现另一种简单的解决方法是相同的:

认沽下面的代码行到你的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"); 
    } 
} 
+0

pawan我已经添加了ur代码,但仍然在网址中看到带有扩展名的页面名称, – 2013-06-12 07:53:29

+0

它应该可以工作,我已经在我的两个项目中使用了它。重新检查是否有其他东西丢失。 – 2013-09-11 06:32:24

+0

这段代码没有做你说的。 – 2013-12-03 14:51:51

0

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

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

文件 - >新建 - >文件 - >全局应用程序类

在项目的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 
+0

谢谢Artjom B.,现在的答案反映了你的建议。 - 谢谢 – sec0ndHand 2015-05-11 19:42:06

3

另一个更现代的方法是使用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); 
    } 
0

您可以在C#这样做是为了用在ASP.NET您的网址自定义扩展。

让代码中的“.recon”为您定制的扩展。 (如更换 “.recon”,以自己的分机)

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"); 
     } 
}