http - PHP_SELF vs PATH_INFO vs SCRIPT_NAME vs REQUEST_URI

标签 http php codeigniter

我正在 CodeIgniter 中构建一个 PHP 应用程序。 CodeIgniter 将所有请求发送到主 Controller :index.php。但是,我不喜欢在 URI 中看到 index.php。例如,http://www.example.com/faq/whatever 将路由到 http://www.example.com/index.php/faq/whatever .我需要一种可靠的方法让脚本知道它的地址是什么,这样它就会知道如何处理导航。根据 CodeIgniter 文档,我使用了 mod_rewrite

规则如下:

RewriteEngine on
RewriteCond $1 !^(images|inc|favicon\.ico|index\.php|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L] 

通常,我只会检查 php_self,但在这种情况下,它始终是 index.php。我可以从 REQUEST_URIPATH_INFO 等中获取它,但我正在尝试确定哪个最可靠。有谁知道(或知道在哪里可以找到)PHP_SELFPATH_INFOSCRIPT_NAMEREQUEST_URI 之间的真正区别?感谢您的帮助!

注意:我必须添加空格,因为 SO 会看到下划线,并且出于某种原因将其设为斜体。

更新:修正了空格。

最佳答案

这些变量之间差异的一些实际例子:
示例 1。 PHP_SELF 与 SCRIPT_NAME 不同 当请求的 url 采用以下形式时:
http://example.com/test.php/foo/bar

[PHP_SELF] => /test.php/foo/bar
[SCRIPT_NAME] => /test.php

(这似乎是 PATH_INFO 包含敏感信息的唯一情况 [PATH_INFO] =>/foo/bar) 注意:这在一些较旧的 PHP 版本(<= 5.0 ?)中曾经有所不同。

示例 2。 输入非空查询字符串时,REQUEST_URI 与 SCRIPT_NAME 不同:
http://example.com/test.php?foo=bar

[SCRIPT_NAME] => /test.php
[REQUEST_URI] => /test.php?foo=bar

示例 3。 当服务器端重定向生效时(例如 apache 上的 mod_rewrite),REQUEST_URI 与 SCRIPT_NAME 不同:

http://example.com/test.php

[REQUEST_URI] => /test.php
[SCRIPT_NAME] => /test2.php

示例 4。 在使用脚本处理 HTTP 错误时,REQUEST_URI 与 SCRIPT_NAME 不同。
使用 apache 指令 ErrorDocument 404/404error.php
http://example.com/test.php

[REQUEST_URI] => /test.php
[SCRIPT_NAME] => /404error.php

在 IIS 服务器上使用自定义错误页面
http://example.com/test.php

[SCRIPT_NAME] => /404error.php
[REQUEST_URI] => /404error.php?404;http://example.com/test.php

关于http - PHP_SELF vs PATH_INFO vs SCRIPT_NAME vs REQUEST_URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/279966/

相关文章:

PHP 和 Apache 环境变量

php - codeigniter transact 将数据添加到两个表中

php - 在通过 jQuery 上传到数据库之前,如何使用进度条和图像预览上传图像?

android - IOS UIWebView 和 Safari 不发送 If-None-Match 但 Android WebView 和 Chrome 发送

php - 在不知道当前位置的情况下查找上一个/下一个 ID(PHP 和 MySQL)

android - 使用改造自定义解析器发布请求

php - 如何在 PHP 中将 MP3 文件一个接一个地组合

php - 如何使用 CodeIgniter 获取表别名的 list_fields?

php - 如果 header 已发送,我如何使用 PHP 重定向?

java - 处理响应代码 : 403 for URL with clojure enlive