如果我有一个菜单,如
<a href="index.php">home</a>
<a href="aboutus.php">about us</a>
<a href="contact.php">contact us</a>
在名为menu.php的文件中
这个menu.php文件包含在整个应用程序的页面中。但是,如果我创建一个新文件夹并调用它的组合,并在此文件夹中有一个名为example1.php的文件,并且menu.php包含在此文件中。家里,关于我们,并联系我们链接不再工作,因为他们指向根。所以我创建了这个功能
function getRoot() {
$self = $_SERVER['PHP_SELF'];
$protocol = $_SERVER['https'] == 'on' ? 'https:/' : 'http:/';
$docroot_before = explode("/", $self);
array_pop($docroot_before);
$docroot_after = implode("/", $docroot_before);
$host = $_SERVER['HTTP_HOST'];
return $protocol.$host.$docroot_after."/";
}
,菜单现在看起来像这样
<a href="<?=getRoot();?>index.php">home</a>
<a href="<?=getRoot();?>aboutus.php">about us</a>
<a href="<?=getRoot();?>contact.php">contact us</a>
the link should come out as http://localhost/domain/aboutus.php (for example)
but it comes out as http://localhost:/domain/portfolio/aboutus.php (and this is wrong).
无论menu.php包含在哪里,总是获得正确的doc root的最佳方法是什么。?
答案 0 :(得分:1)
如果网址以单斜杠(/
)开头,则会链接到根文件夹。只要您的网页位于根文件夹中(即http://www.example.com而非http://www.example.com/foo),就可以使用以下内容:
<a href="/index.php">home</a>
<a href="/aboutus.php">about us</a>
<a href="/contact.php">contact us</a>
如果您在子域中,请将/
更改为/subdomain/
答案 1 :(得分:0)
我在自制框架中使用以下内容...将它放在应用程序根文件夹中的一个文件中,然后只包含它。
define('ABSPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');
$tempPath1 = explode('/', str_replace('\\', '/', dirname($_SERVER['SCRIPT_FILENAME'])));
$tempPath2 = explode('/', substr(ABSPATH, 0, -1));
$tempPath3 = explode('/', str_replace('\\', '/', dirname($_SERVER['PHP_SELF'])));
for ($i = count($tempPath2); $i < count($tempPath1); $i++)
array_pop ($tempPath3);
$urladdr = $_SERVER['HTTP_HOST'] . implode('/', $tempPath3);
if ($urladdr{strlen($urladdr) - 1}== '/')
define('URLADDR', 'http://' . $urladdr);
else
define('URLADDR', 'http://' . $urladdr . '/');
unset($tempPath1, $tempPath2, $tempPath3, $urladdr);
上面的代码定义了两个常量。 ABSPATH包含应用程序根目录(本地文件系统)的绝对路径,而URLADDR包含应用程序的完全限定URL。它在mod_rewrite情况下有效。