6

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

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

似乎有效,至少在index.php被调用的 Apache 中,人们可以/clean_url_here通过$_SERVER['PATH_INFO']. PHP 甚至有点宣传这个特性。此外,例如,CodeIgniter框架使用这种技术作为其 URL 的默认值。

问题:这项技术有多可靠?是否存在 Apache 不调用index.php但尝试解析路径的情况?lighttpd、nginx、IIS、AOLServer 呢?

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

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

4

4 回答 4

4

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

Apache:AcceptPathInfo
IIS:例如AllowPathInfoForScriptMappings等等
等等……

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

于 2010-04-14T07:49:33.967 回答
1

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

于 2010-04-14T07:46:56.567 回答
0

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

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

  • 原始网址www.example.com/index.php?clean_url=clean_url_here
  • path_info 机制www.example.com/index.php/clean_url
  • mod_rewritewww.example.com/clean_url

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

于 2010-04-14T08:01:20.570 回答
0

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

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

于 2010-04-14T08:05:24.523 回答