PHP从URL获取正确的路径 请考虑以下URL: http://www.mydomain.com/a/test.php https://www.mydomain.org/a/b/test.php http://www.mydomain.co.nr/a/b/c/test.php https://www.mydomain.com/a/b/c/d/test.php http://www.mydomain.co.uk/a/b/c/d/e/test.php https://www.mydomain.co.au.nm/a/b/c/d/e/f/test.php?var1=test1&var2=test2

PHP从URL获取正确的路径 请考虑以下URL: http://www.mydomain.com/a/test.php https://www.mydomain.org/a/b/test.php http://www.mydomain.co.nr/a/b/c/test.php https://www.mydomain.com/a/b/c/d/test.php http://www.mydomain.co.uk/a/b/c/d/e/test.php https://www.mydomain.co.au.nm/a/b/c/d/e/f/test.php?var1=test1&var2=test2,php,url,Php,Url,现在,我想在test.php文件中声明一个名为ACTUAL_URL的常量,以便它分别包含以下输出(假设这些URL分别按上述顺序表示网站的主目录): 现在考虑一个文件,1.PHP位于以下位置: http://www.mydomain.com/1.php https://www.mydomain.org/a/1.php http://www.mydomain.co.nr/a/b/1.php https://www.mydomain.com/a/b/c/1.php http://www.mydomai

现在,我想在test.php文件中声明一个名为ACTUAL_URL的常量,以便它分别包含以下输出(假设这些URL分别按上述顺序表示网站的主目录):

现在考虑一个文件,1.PHP位于以下位置:

http://www.mydomain.com/1.php
https://www.mydomain.org/a/1.php
http://www.mydomain.co.nr/a/b/1.php
https://www.mydomain.com/a/b/c/1.php
http://www.mydomain.co.uk/a/b/c/d/1.php
https://www.mydomain.co.au.nm/a/b/c/d/e/1.php
1.PHP的PHP代码为:

//1.php
//The folder name may remain as "a" or may change. 
//But for most cases, it will be "a"
require_once('a/test.php');

//Rest of the code for the page 
需要注意的几件事:

  • 理想情况下,test.php永远不会单独执行。相反,它是一个包含文件,将包含在主目录中的其他文件和/或子目录中的任何其他文件中
  • 注意,代码足够智能,可以从接收到的url检测http和https并使用相同的url
  • 它可能是一个.com域或.co.au.nm域,但仍能正确获取它
  • 去掉通过$\u GET接收的所有参数
  • 我尝试了以下方法,但没有得到满意的答案:

    define("ACTUAL_URL", basename($_SERVER['PHP_SELF']) );
    define("ACTUAL_URL", dirname($_SERVER['PHP_SELF']) );
    define("ACTUAL_URL", $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"] );
    
    前两个不提供网站URL,而是提供文件夹的物理路径,这不是必需的。我需要可访问的URL。第三个提供域名+文件夹(这很好),但包含当前正在执行的页面的文件名以及与之关联的任何$\u GET参数。例如,在网站中考虑我的文件的以下结构:

    https://www.mydomain.co.au.nm/a/b/c/d/e/1.php?var1=test1&var2=test2
    https://www.mydomain.co.au.nm/a/b/c/d/e/f/test.php
    
    在上述情况下,我希望恒定的实际URL为我提供:

    https://www.mydomain.co.au.nm/a/b/c/d/e/
    
    test.php的相对路径将始终包含在1.php文件中

    那么如何实现上述功能呢?

    您可以使用该功能两次。一次删除文件名(和任何查询字符串变量),另一次遍历一个目录

    dirname(dirname($_SERVER["REQUEST_URI"]));
    
    请注意,这对网站根目录中的文件不起作用。所有路径都需要至少有1个文件夹深


    实际上,从安全的角度来看,整个方法都是有问题的。允许客户端传入最终被切碎并传入
    require\u一次的路径
    将打开您的应用程序。如果要执行此操作,请确保验证/清理输入。

    查看该函数。它应该为您提供一个良好的起点。

    您好,您能告诉我如何从安全角度实施更好的解决方案吗?谢谢。@Denver:对
    require\u调用使用相对路径,或者对路径前缀使用硬编码常量。谢谢您的回复。我会调查的。
    
    dirname(dirname($_SERVER["REQUEST_URI"]));