【问题标题】:Remove HTML or ASPX Extension删除 HTML 或 ASPX 扩展
【发布时间】:2011-05-27 18:25:31
【问题描述】:

在托管的 IIS7 环境中,我正在寻找使用无扩展名文件名的最简单方法。只是我有以下页面:

index.html(或 .aspx)--> domain.com gallery.html --> domain.com/gallery 视频.html --> domain.com/videos 等等……

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

谢谢。

【问题讨论】:

标签: asp.net html iis-7 url-rewriting


【解决方案1】:

您好,我遇到了页面重定向问题

我有一个类似 /products.html 的页面,在我实施 .html 扩展删除后会显示为 /products。我使用友好的 url 删除了 .aspx 扩展名。

我创建了一个新页面 /newproducts.aspx 页面并希望将所有 /products 重定向到 /newproducts 页面,但它不起作用。

我必须使用下面的代码才能让它工作。

     <rule name="products URLRedirect" stopProcessing="true">
          <match url="^products.html$" ignoreCase="true" />
          <action type="Redirect" url="/newproducts.aspx" redirectType="Permanent" />
        </rule>
          <rule name="new prod URLRedirect" stopProcessing="true">
          <match url="^products$" ignoreCase="true" />
          <action type="Redirect" url="/newproducts.aspx" redirectType="Permanent" />
        </rule>

我从 web.config 中删除了删除 html 扩展名的代码。感谢您对处理此问题的最佳方法的想法。

【讨论】:

    【解决方案2】:

    在特定页面的 asp WebForm 中删除 .aspx 扩展名的简单解决方案:

    1- 检查解决方案资源管理器>>转到 Global.asax 文件>>检查方法 Application_BeginRequest 在此方法中写入此代码

    // 代码在这里

        // Remove aspx Extension From Smy Page
        string CurrentPath = Request.Path; // getting Current Url
        if(CurrentPath == "/YourPageURL")
         
            HttpContext MyContext = HttpContext.Current;
            MyContext.RewritePath("/YourPageURL.aspx");
    

    //enter code here希望这对你没问题。 // Ghazi Hur mahar.ghazi@gmail.com

    【讨论】:

    • 这甚至无法编译。
    【解决方案3】:

    我最终使用了以下网站:

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

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

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

    【讨论】:

    • 感谢这个出色的解决方案。澄清一下,上面的 XML 位于 web.config 的 元素中。
    • 刚刚救了我的命 +1
    【解决方案4】:

    您可以在 c# 中执行此操作,以便在 ASP.NET 中的 URL 中使用自定义扩展。

    让代码中的“.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");
            }
     }
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 最好的,现在官方支持了。当您创建新的WebForms 项目时,会自动添加此代码。
      【解决方案6】:

      我没有足够的评论积分,这正在改进 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
      

      【讨论】:

      • 感谢 Artjom B.,答案现在反映了您的建议。 - 谢谢
      【解决方案7】:

      实现相同目的的另一个最简单的解决方案:

      将以下代码行放入您的 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");
         }
      }
      

      【讨论】:

      • pawan 我已经添加了你的代码,但仍然在 url 中看到带有扩展名的页面名称,
      • 它应该可以工作,我已经在我的几个项目中使用了它。重新检查是否缺少其他内容。
      • 此代码允许页面在没有 .aspx 的情况下工作,但不会删除 .aspx
      • 那么,如何删除.aspx扩展名呢?正如奥吉斯正确指出的那样,它只是在没有 .aspx 扩展名的情况下工作,但不会删除它。我应该如何做同样的事情?
      【解决方案8】:

      如果您有动态代码,我认为最简单的做法是将文件从 .aspx 重命名为 .html,尤其是在您只有少数页面的情况下。如果不以某种方式重写 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

      【讨论】:

      • 谢谢,但我们的想法是完全摆脱扩展。不要从 HTML > ASPX 重命名它们,反之亦然。 ScottGu 的帖子有点过时,但确实有一些有用,但比我寻找的信息要复杂。
      • 如果您查看方法 3,该链接中提供的信息确实会告诉您如何删除扩展名。那里的说明描述了 current 使用 IIS7 删除扩展名的过程,即使它写于 2007 年。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 2022-03-04
      • 2014-02-10
      相关资源
      最近更新 更多