PHP $_SERVER['...']
诸如 for 'PHP_SELF'
, 'SCRIPT_NAME'
,之类的变量'REQUEST_URI'
让我有些困惑。我已经看到(至少一些)关于这些的先前问题,并且可以在某些环境中进行一些测试,但是我遇到了发生意外事情的环境。
我编写的应用程序必须可安装在文档根目录下的任何子目录中。例如,假设文档根目录是/var/www/html
并且应用程序安装在/var/www/html/sub/dir
. 我需要require()
文件/var/www/html/sub/dir
(或子目录)并链接到www.example.com://sub/dir
. 调用 '/sub/dir' SUB_DIR。我还想要为友好的 url 重写规则,例如www.example.com/sub/dir/route/key1/val1/key2/val2
.
我有一个.htaccess
用于 Apache 和一个用于 IIS 的 web.config 来进行重写以通过/var/www/html/sub/dir/index.php
. 我还没有遇到需要弄清楚 nginx 或其他人。
我一直在做类似以下的事情,但更关心一个问题和 Windows v. 真实世界的目录分隔符。
$docRoot = $_SERVER['DOCUMENT_ROOT'];
$reqUrl = $_SERVER['REQUEST_URI'];
$pwd = __DIR__; /* Occuring in www.example.com/sub/dir/index.php) */
/* Expected example value for $pwd: /var/www/html/sub/dir */
$appLinkDir = substr($pwd, strlen(docRoot));
/* Expected example value for $appLinkDir: /sub/dir */
$workingRequest = substr($_SERVER['REQUEST_URI'], strlen(appLinkDir));
/* Expected example value for $workingRequest: /route/key1/val1/key2/val2 */
我遇到了 $pwd 是 /var/www/html 而不是 /var/www/html/sub/dir 的环境。我的猜测是该应用程序安装在 /var/www/html (不是 /var/www/html/sub/dir )中,但他们是从 /sub/dir/index.php (或其他东西)进行全局重写。无论如何,$pwd 的意外值给了我意外的 $appLinkDir 和 $workingRequest 值。
有问题的环境来自第三方代码审查员,他可能认为我的应用程序应该安装在/var/www/html/sub/dir
它实际上希望发现它的安装位置时。
关于如何获得$appLinkDir
和的正确值的任何好的(甚至是坏的)想法$workingRequest
?