如何安全地获取当前PHP页面的父目录的完整URL

Roc*_*man 17 php url path

我正在使用:

$domain = $_SERVER['HTTP_HOST'];
$path = $_SERVER['SCRIPT_NAME'];
$themeurl = $domain . $path;
Run Code Online (Sandbox Code Playgroud)

但这当然会提供完整的URL.相反,我需要完整的URL减去当前文件和一个目录并减去尾部斜杠.

因此,无论浏览器URL域是什么,例如localhost,https://,http://等,都会给出父目录的完整实际(绕过任何mod重写)URL路径而不带尾部斜杠.

这是怎么做到的?安全,所以没有XSS,因为我猜(从阅读中)使用"SCRIPT_NAME"之类的任何东西都有这样的风险..虽然不确定但是...只是读了很多试图解决这个问题.

示例:如果给出:

https://stackoverflow.com/questions/somequestions/index.php
Run Code Online (Sandbox Code Playgroud)

需要:

https://stackoverflow.com/questions
Run Code Online (Sandbox Code Playgroud)

没有尾随斜线.

也应该说:

http://localhost/GetSimple/admin/load.php
Run Code Online (Sandbox Code Playgroud)

要得到

http://localhost/GetSimple
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的.

谢谢.



编辑: 这是我使用的工作解决方案:

$url  = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';
$url .= $_SERVER['SERVER_NAME'];
$url .= htmlspecialchars($_SERVER['REQUEST_URI']);
$themeurl = dirname(dirname($url)) . "/theme";
Run Code Online (Sandbox Code Playgroud)

它完美地运作.

hek*_*mgl 34

这很容易 - 使用该功能dirname两次:)

echo dirname(dirname('https://stackoverflow.com/questions/somequestions/index.php'));
Run Code Online (Sandbox Code Playgroud)

另请注意@Sid的评论.如果您需要完整的uri到当前脚本,使用协议和服务器,请使用以下内容:

$url  = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';
$url .= $_SERVER['SERVER_NAME'];
$url .= $_SERVER['REQUEST_URI'];

echo dirname(dirname($url));
Run Code Online (Sandbox Code Playgroud)