快速一:
我很好奇是否有人知道在某些情况下$_SERVER['REQUEST_URI']
会包含与 不同的值$_GET['_uri']
,因为.htaccess
后者如下:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ?_uri=$1 [L,QSA]
我一直在使用后一种方法$_GET['_uri']
,虽然我知道这mod_rewrite
仍然是必要的,但我想避免将 URI 存储为查询参数。
好吧,我发现了一个我以前没有注意到的;当转发到的应用程序引导mod_rewrite
不在web根目录中时,$_SERVER['REQUEST_URI']
包含父目录,而$_GET['_uri']
只包含后一个URI组件。例子:
引导程序正在 请求
/subdir/index.php
http://localhost/subdir/foo/bar/baz/
$_SERVER['REQUEST_URI']
"/subdir/foo/bar/baz/"
$_GET['_uri']
"foo/bar/baz/"
为了复制 的结果$_GET['_uri']
,决定使用这个:
$prefix = trim(dirname(strtr($_SERVER['PHP_SELF'], '\\', '/')), '/') . '/';
$uri = trim($_SERVER['REQUEST_URI'], '/') . '/';
if(substr($uri, 0, strlen($prefix)) == $prefix){
$uri = substr($uri, strlen($prefix));
}
但我过去并不$_SERVER['PHP_SELF']
经常使用,现在读到它带有某些漏洞和/或与它的使用不一致。