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

标签 php url path

我正在使用:

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

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

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

这是怎么做到的? 安全地,所以没有 XSS,因为我猜(从阅读中)使用除了“SCRIPT_NAME”之外的任何东西都有这样的风险..虽然ofc不确定..只是读了很多书试图弄清楚这一点。

例子: 如果给出:

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

需要:

https://stackoverflow.com/questions

没有尾部斜杠。

也应该适用于 say:

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";

它完美地工作。

最佳答案

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

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

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

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

echo dirname(dirname($url));

关于php - 如何安全地获取当前 PHP 页面父目录的完整 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15110355/

相关文章:

javascript - 在 JavaScript 中调用函数

perl - 如何将调用环境正确导出到 Perl 的子 shell 中?

java - 如何从批处理脚本检查 Java 安装?

javascript - 通过 Ajax 将数据从 Laravel 7 View 传递到 Controller

php - 适用于 PHP 5.4 版的 Magento 补丁

javascript - laravel 无法使用 ajax 服务器状态 419 发布数据

php - url 上的 Opencart token 是 session ID 吗?

angularjs - 没有 URL 的单页应用程序

list - 如何使用Java使用youtube API v3获取视频的URL

javascript - 找不到自定义模块的要求路径