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

2022-08-30 22:59:24

我正在使用:

$domain = $_SERVER['HTTP_HOST'];
$path = $_SERVER['SCRIPT_NAME'];
$themeurl = $domain . $path;

但这当然给出了完整的URL。相反,我需要完整的URL减去当前文件,并增加一个目录并减去尾部斜杠

因此,无论浏览器URL域是什么,例如localhost,https://,http:// 等,父目录的完整真实(绕过任何mod重写)URL路径都没有尾随斜杠。

这是如何完成的?安全起见,所以没有XSS,因为我猜(从阅读中)使用任何东西,除了“SCRIPT_NAME”之外,都有这样的风险。虽然不确定。只是一直在阅读大量试图弄清楚这一点。

示例:如果给定:

https://stackoverflow.com/questions/somequestions/index.php

需要:

https://stackoverflow.com/questions

不带尾部斜杠。

并且还应该工作,例如:

http://localhost/GetSimple/admin/load.php

获取

http://localhost/GetSimple

这就是我正在努力做的事情。

谢谢。



编辑:这是我使用的工作解决方案:
$url  = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';
$url .= $_SERVER['SERVER_NAME'];
$url .= htmlspecialchars($_SERVER['REQUEST_URI']);
$themeurl = dirname(dirname($url)) . "/theme";

它完美地工作。


答案 1

这很简单 - 使用函数 dirname 两次:)

echo dirname(dirname('https://stackoverflow.com/questions/somequestions/index.php'));

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

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

echo dirname(dirname($url));

答案 2

我有更简单的语法来获取带有端口和url的父地址,让我们尝试我的代码

dirname($_SERVER['PHP_SELF'])

使用此代码,您可以获得adres的直接父级,如果要2x回滚目录,则可以循环

dirname(dirname($_SERVER['PHP_SELF']))

dirname是获取父addrest web的fungtion,$_SERVER['PHP_SELF']可以显示当前的addres web。

塔尤·https://stackoverflow.com/users/171318/hek2mgl 爵士


推荐