访问父文件夹+ URL中的其他子文件夹,同时保持服务器部分


Accessing parent folder + other child folder inside URL, while maintaining server portion

我有两个具有两个不同url的文件,我希望page1生成到page2的链接。为了避免误解,这必须通过编程来解决,以便在域名更改时保持一致性。

<<p> 示例url/strong>
https://helpdesk.mydomain.com/project1/page1.phphttps://helpdesk.mydomain.com/project1/page2.php

我的当前代码生成链接到page2(基于page1的URL)

$server = "https://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']);
$link = $server . "/page2.php";

变量$server包含https://helpdesk.mydomain.com/project1/部分
在$link中,我只是将这个值与page2的文件名连接起来。

但是现在,我决定将我的主文件夹 (project1) 拆分为子文件夹 (subtask1, subtask2)

https://helpdesk.mydomain.com/project1/subtask1/page1.phphttps://helpdesk.mydomain.com/project1/subtask2/page2.php

为了从page1中生成的链接到达page2,我必须如何调整上面所示的两行代码?

我想我必须在某个地方使用../,但我从未在URL中看到过这个…

编辑:我不能使用相对链接,因为生成的链接是通过电子邮件发送给某人的。链接必须包含完整的URL

谢谢

假设结构示例是实际用例,您所需要的只是两个这样的链接。

<a href="../subtask2/page2.php">This link goes on page 1</a>
<a href="../subtask1/page1.php">This link goes on page 2</a>

这些是相对链接,你可以在这里阅读更多关于它们的信息。http://www.coffeecup.com/help/articles/absolute-vs-relative-pathslinks/

我相信你可以使用dirname:

dirname($path);

dirname('helpdesk.mydomain.com/project1/page1.php');

应该给出:helpdesk.mydomain.com/project1,和

dirname('helpdesk.mydomain.com/project1')

应该给出helpdesk.mydomain.com

编辑

我实际上考虑了一下这个问题,并提出了以下函数:

function up_folder($path, $depth = 1){
    for ($i=0; $i < $depth; $i++) { 
        $path = dirname($path);
    }
    return $path;
}

你可以这样做:

$path = 'https://helpdesk.mydomain.com/project1/subtask1/page1.php';
echo up_folder($path);
echo up_folder($path, 2);
echo up_folder($path, 3);
echo up_folder($path, 4);

这将输出如下内容:

  • https://helpdesk.mydomain.com/project1/subtask1
  • https://helpdesk.mydomain.com/project1
  • https://helpdesk.mydomain.com
  • https:

记住这个编辑,您可能想要尝试这样的操作。警告:未测试代码:)

$server = "https://" . $_SERVER['HTTP_HOST'];
$suffix = dirname($_SERVER['REQUEST_URI']);
$bits = explode($suffix, "/");
for ($i = 0; $i < count($bits) - 1; $i++) {
    $server = $server . $bits[$i] . "/";
}
$server = $server . "subtask1/task1.php";
// OR
// $server = $server . "subtask2/task2.php";