【问题标题】:Removing URL file extension删除 URL 文件扩展名
【发布时间】:2012-05-12 19:55:07
【问题描述】:

我一直在探索“更漂亮”的 URL,我做的第一件事就是删除扩展名(例如 .aspx)。为此,我使用了 IIS 中的 URL 重写模块。

如果我访问,现在可以使用

http://www.mysite.com/folder/filename

http://www.mysite.com/folder/filename.aspx

后者被重定向到第一个并加载页面。然后我尝试了以下方法:

http://www.mysite.com/folder/filename/

这会中断(正如我所料),但这似乎是糟糕的用户体验。也许作为一个经常上网的用户,我觉得没有斜线或斜线应该可以。我知道在末尾添加斜线的唯一方法是创建一个文件夹并使用默认的default.aspx 页面,如果可以的话,我想避免使用。

接着,我尝试添加一个与文件同名的目录,因此在上面的示例中,我创建了一个名为filename 的目录。在这个目录中,我创建了一个默认的default.aspx。现在,如果我尝试访问相同的 URL http://www.mysite.com/folder/filename,我将被发送到该新文件夹的 default.aspx 页面,并在 URL http://www.mysite.com/folder/filename/ 后附加一个斜杠。

这表明默认情况下,不带扩展名的 URL 会尝试访问目录,只有在未找到时 IIS 才会覆盖提供文件,因此从某种意义上说,尝试使用无扩展名的文件名来欺骗它似乎是一种黑客行为。

幸运的是,我可以完全控制文件和文件夹的名称,因此我希望可以防止发生任何事故(尽管我必须小心)。所以我的问题是:有没有一种方法可以删除文件扩展名但仍然允许附加斜杠并仍然找到文件。如果我能帮上忙,我不想创建大量目录,里面都包含 default.aspx。

【问题讨论】:

  • 您有自定义的 404 处理程序页面吗?如果是这样,请使用它来执行重定向/转移到您想要的页面。
  • 我确实有一个自定义 404 页面,我想我可以用它来重定向,有没有更好的方法?
  • 这是我过去的做法。
  • 如果没有 IIS 重写规则,很难提供明确的答案,也许您可​​以发布 xml 配置。

标签: asp.net url url-rewriting


【解决方案1】:

我不完全确定 IIS 如何处理 mod_rewrite,但希望我在 linux 环境中应用的逻辑能够帮助您解决问题。

在我的 .htaccess 文件中,我首先编写了两个适用于以下规则的条件;它表示如果以下 url 不是文件且不是目录,则将用户重定向到以下页面。

但是,如果目录或文件存在,则始终优先。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^news/([^/]*)$ news.php?article_slug=$1 [L,QSA]

该规则允许您需要的结构(文件夹/文件)或至少将其模拟为 url。

所以上面的例子会直接

http://www.mysite.com/news/article-name & http://www.mysite.com/news/article-name/

到带有 GET 变量 article_slug 的 news.php

如果有任何帮助或者我可以提供进一步帮助,请告诉我。

【讨论】:

    【解决方案2】:

    最简单的方法是使用 ASP.NET 路由,我假设您在谈论 Web 表单,对于您的示例来说这很简单:

    1. 向项目添加 System.Web.Routing 引用
    2. 在 Global.asax.cs 中使用路由(使用 System.Web.Routing;)
    3. 在应用启动时添加路由:
    protected void Application_Start(object sender, EventArgs e)
    {
      RouteTable.Routes.MapPageRoute("", "Filename", "~/Filename.aspx");
    }
    

    就是这样。

    这里有更多关于 Routing for win 表格的信息:

    http://msdn.microsoft.com/en-us/library/cc668201.aspx#adding_routes_to_a_web_forms_application

    http://msdn.microsoft.com/en-us/library/dd329551.aspx

    【讨论】:

    • 嗯,这与其说是一个解决方案,不如说是一个 hack,因为它使用的工具集与@Chris 所说的他正在使用的工具集不同。它还依赖于网站是 .NET 3.5+ 网站。根据签出、编辑、签入、审查、合并、构建、测试和部署的摩擦程度,这可能距离成为一个简单的“解决方案”还有很长的路要走
    【解决方案3】:

    IIS 重写(正确)将带有斜杠的 URL 匹配为不同的 URL。根据规则的实施方式,您可能需要

    • 实施 2 条规则,一条用于处理从所有或特定 URLS 中添加(或删除)尾部斜杠,另一条用于处理 将 URL 重写为 .aspx 页面。
    • 您可能需要为带有和不带有的 URL 添加单独的映射 尾部斜杠

    解决方案实际上取决于您匹配的位置和方式。

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 1970-01-01
      • 2020-11-08
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多