【问题标题】:How reliable are URIs like /index.php/seo_path/index.php/seo_path 之类的 URI 有多可靠
【发布时间】:2011-02-07 19:16:53
【问题描述】:

我注意到,有时(尤其是在 mod_rewrite 不可用的情况下)会使用此路径方案:

http://host/path/index.php/clean_url_here
--------------------------^

似乎可以工作,至少在调用index.php 的Apache 中,可以通过$_SERVER['PATH_INFO'] 查询/clean_url_here 部分。 PHP甚至kind of advertises这个功能。此外,例如,CodeIgniter 框架使用此技术作为其 URL 的默认设置。

问题:该技术的可靠性如何?是否存在 Apache 不调用 index.php 而是尝试解析路径的情况? lighttpd、nginx、IIS、AOLServer呢?

ServerFault 问题? 我认为这与在 PHP 代码中使用此功能有关。所以我在这里问。

附录:正如 VolkerK 所建议的,对这个问题的合理扩展是:程序员如何影响$_SERVER['PATH_INFO'] 在各种服务器类型上的存在?

【问题讨论】:

    标签: php url server-configuration pathinfo


    【解决方案1】:

    我认为这是一个同样适用于 stackoverflow 和 serverfault 的问题。例如。作为开发人员,我只能告诉您 pathinfo 与任何用户输入一样值得信赖(这意味着它几乎可以包含任何内容),并且您的脚本可能会或可能不会收到它,具体取决于网络服务器版本和配置:

    阿帕奇:AcceptPathInfo
    IIS:例如AllowPathInfoForScriptMappings
    等等等等……

    但服务器管理员可能会告诉您“在现实世界中”可以期待哪些设置,以及为什么首选这些设置。
    所以问题就变成了:您(或预期的用户群)对服务器配置有多大影响。

    【讨论】:

    • 感谢 Apache 和 IIS 链接。经过一番谷歌搜索(基于新获得的关于 AcceptPathInfo 的知识),我也找到了 nginx 的解决方案:kbeezie.com/view/php-self-path-nginx
    【解决方案2】:

    需要启用AcceptPathInfo 才能使其正常工作。

    【讨论】:

      【解决方案3】:

      根据我的经验,我会说PATH_INFO 通常在正常的网络托管环境和服务器设置中可用 - 即使在 IIS 上也是如此 - 但在极少数情况下,它不是。在构建应该可在尽可能多的平台上部署的应用程序时,我不会信任硬编码级别的 path_info。

      只要有可能,我都会尝试构建一个包装函数build_url(),根据配置设置,它可以使用任何一个

      • 原始 URL www.example.com/index.php?clean_url=clean_url_here
      • path_info 机制www.example.com/index.php/clean_url
      • mod_rewrite www.example.com/clean_url

      并在应用程序发出的所有 URL 中使用它。

      【讨论】:

      • 抽象总是一个好主意,同意。不过,我想具体了解一下 PATH_INFO 体验以及此功能的可用性。
      【解决方案4】:

      可能存在无法识别此 URL 格式的简单脚本(例如自动链接)。从而减少创建指向您的内容的链接的机会。
      由于这些任务很常见自创的正则表达式模式,因此失败的可能性非常大。

      从技术上讲,这些 URL 没问题。在 SEO 方面,它们“不那么完美”。

      【讨论】:

        猜你喜欢
        • 2020-07-18
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        • 2011-09-24
        相关资源
        最近更新 更多