【问题标题】:Why we don't use such URL formats?为什么我们不使用这样的 URL 格式?
【发布时间】:2011-03-14 05:32:12
【问题描述】:

我正在修改我的项目的 URL 格式。我们的搜索 URL 的基本格式是这样的:-

www.projectname/module/search/<search keyword>/<exam filter>/<subject filter>/... other params ...

在没有搜索关键字和考试过滤器的情况下进行搜索,URL 将是:-

www.projectname/module/search///<subject filter>/... other params ...

我的问题是为什么我们看不到这样的带有背靠背斜杠的 URL(www.projectname/module/search 之后的 3 个斜杠)?请注意,我不再在我的项目中使用 .htaccess 重写规则。此 URL 功能完美。那么,我应该使用这种格式吗?

有关我们为什么选择这种格式的更多详细信息,请查看我的另一个问题:- Suggest best URL style

【问题讨论】:

    标签: url url-routing friendly-url


    【解决方案1】:

    出于兼容性和安全原因,Web 服务器通常会在应用程序看到请求之前删除多个斜杠。在提供纯文件时,通常允许路径段之间的任意数量的斜线作为一个斜线。

    空白 URL 路径段在 URL 中并非无效,但通常会避免使用它们,因为带有空白段的相对 URL 可能会意外解析。例如在/module/search 中,指向//subject/param 的链接与文件无关,而是指向带有路径/param 的服务器subject 的链接。

    能否从原始 URL 中看到多斜杠序列取决于您的服务器和应用程序框架。例如,在 CGI(以及其他基于它的网关标准)中,通常用于实现路由的 PATH_INFO 变量通常会省略多个斜杠。但是在 Apache 上有一个非标准的环境变量 REQUEST_URI,它给出了请求的原始形式,而没有像 PATH_INFO 那样省略斜杠或完成任何 %-unescaping。因此,如果您想允许空路径段,您可以,但它会减少您的部署选项。

    除了空字符串之外,还有其他字符串也不能构成好的路径段。许多服务器默认阻止使用编码的/ (%2F)、\ (%5C) 或空字节 (%00)。所以你不能把任何旧字符串放在一个段中;必须对其进行处理以删除某些字符(通常“slug”化以删除除字母和数字之外的所有字符)。在执行此操作时,您也可以将空字符串替换为 _

    【讨论】:

      【解决方案2】:

      可能是因为没有明确定义额外的 / 是否应该被忽略。

      例如:http://news.bbc.co.uk/sporthttp://news.bbc.co.uk//////////sport 在 Firefox 和 Chrome 中都显示相同的页面。服务器将这两个 url 视为同一事物,而您的服务器显然没有。

      我不确定这种行为是否在某个地方定义,但它似乎是有道理的(至少对于 BBC 网站来说——如果我输入额外的 /,它会按照我的意思做。)

      【讨论】:

        猜你喜欢
        • 2021-01-01
        • 2012-10-22
        • 1970-01-01
        • 2015-02-12
        • 1970-01-01
        • 2016-01-12
        • 1970-01-01
        • 1970-01-01
        • 2013-09-29
        相关资源
        最近更新 更多