像/index.php/seo_path这样的URI有多可靠?

6
我注意到有时候(特别是在没有mod_rewrite的情况下)会使用这种路径方案:
http://host/path/index.php/clean_url_here
--------------------------^

这似乎可以工作,至少在Apache中可以,当调用index.php时,可以通过$_SERVER['PATH_INFO']查询/clean_url_here部分。甚至PHP也宣传了这个特性。例如,CodeIgniter框架默认使用此技术来处理它们的URL。
问题是:这种技术有多可靠?是否存在情况,其中Apache不调用index.php而尝试解析路径?那么轻量级服务器、nginx、IIS、AOLServer呢?
这是一个ServerFault问题吗?我认为它更多涉及在PHP代码中使用此功能。因此我在这里提问。
附加说明:正如VolkerK所建议的,这个问题的合理扩展是:程序员如何影响$_SERVER['PATH_INFO']在各种服务器类型上的存在?
4个回答

4
我认为这是一个同样适合于stackoverflow和serverfault的问题。例如,作为开发人员,我只能告诉您pathinfo与任何用户输入一样可信(这意味着它可以包含几乎任何内容),并且根据Web服务器版本和配置,您的脚本可能会或可能不会接收到它:
Apache:AcceptPathInfo
IIS:例如AllowPathInfoForScriptMappings
以此类推...
但是,服务器管理员可能可以告诉您可以在“实际环境”中期望哪些设置以及为什么偏好这些设置。
因此,问题变成了:您(或预期的用户群)对服务器配置有多少影响力。

感谢提供Apache和IIS的链接。在通过Google搜索获得有关AcceptPathInfo的新知识后,我也找到了nginx的解决方案:http://kbeezie.com/view/php-self-path-nginx/。 - Boldewyn

1

0

根据我的经验,我会说PATH_INFO通常在普通的Web托管环境和服务器设置中都是可用的 - 即使在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的经验和此功能的可用性。 - Boldewyn

0

可能会有一些天真的脚本(例如自动链接)无法识别此URL的格式,从而降低了创建指向您内容链接的机会。
由于这些任务通常使用自制的正则表达式模式,因此失败的可能性非常真实。

从技术上讲,这些URL是可以的。但从SEO角度来看,它们并不是“完美”的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接