我正在CodeIgniter中构建一个PHP应用程序。CodeIgniter将所有请求发送到主控制器:index.php。但是,我不喜欢index.php在URI中看到。例如,http://www.example.com/faq/whatever将路由到http://www.example.com/index.php/faq/whatever。我需要一种可靠的方法来让脚本知道其地址,因此它将知道如何处理导航。mod_rewrite根据CodeIgniter文档,我已经使用过。
index.php
http://www.example.com/faq/whatever
http://www.example.com/index.php/faq/whatever
mod_rewrite
规则如下:
RewriteEngine on RewriteCond $1 !^(images|inc|favicon\.ico|index\.php|robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L]
通常,我只是检查一下php_self,但在这种情况下,它始终为index.php。我可以从REQUEST_URI,PATH_INFO等获得它,但是我正在尝试确定哪一个最可靠。没有人知道(或不知道在哪里可以找到)之间的真正区别PHP_SELF,PATH_INFO,SCRIPT_NAME,和REQUEST_URI?谢谢你的帮助!
php_self
REQUEST_URI
PATH_INFO
PHP_SELF
SCRIPT_NAME
注意 :我不得不添加空格,因为SO看到了下划线,并且由于某种原因使其变为斜体。
更新 :修复了空格。
该PHP文件可以告诉你的区别:
‘PHP_SELF’ 当前正在执行的脚本的文件名,相对于文档根目录。例如,位于地址 http://example.com/test.php/foo.bar 的脚本中的 $ _SERVER [‘PHP_SELF’] 为 /test.php/foo.bar 。该FILE常量包含当前的完整路径和文件名(例如包含文件)。如果PHP作为命令行处理器运行,则此变量包含自PHP 4.3.0起的脚本名称。以前不可用。 __ “ SCRIPT_NAME” 包含当前脚本的路径。这对于需要指向自己的页面很有用。该FILE常量包含当前的完整路径和文件名(例如包含文件)。 “ REQUEST_URI” 为了访问该页面而给出的URI;例如 ‘/index.html’ 。
‘PHP_SELF’
当前正在执行的脚本的文件名,相对于文档根目录。例如,位于地址 http://example.com/test.php/foo.bar 的脚本中的 $ _SERVER [‘PHP_SELF’] 为 /test.php/foo.bar 。该FILE常量包含当前的完整路径和文件名(例如包含文件)。如果PHP作为命令行处理器运行,则此变量包含自PHP 4.3.0起的脚本名称。以前不可用。 __
“ SCRIPT_NAME”
包含当前脚本的路径。这对于需要指向自己的页面很有用。该FILE常量包含当前的完整路径和文件名(例如包含文件)。
“ REQUEST_URI”
为了访问该页面而给出的URI;例如 ‘/index.html’ 。
似乎没有记录PATH_INFO …