服务器根href和文档根

时间:2013-11-17 16:26:32

标签: php xampp document-root

我是PHP新手,因此我在OSX上使用XAMPP。我试图在生产和开发中提供相同的<a href="....">

我继承了一个所有单级目录的网站(我知道,但不值得更改过多的代码)。现在我正在尝试制作一个设计合理的网站。

所以,如果我有一个导航栏,请使用以下代码:

  <li><a href="../services.php">Services</a></li>
  <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Equipment<b class="caret"></b></a>
    <ul class="dropdown-menu">
      <li><a href="../equipment/equip1.php">Refrigerated Machines</a></li>

我使用../来访问文档根目录,然后设置绝对路径。在生产版本上它工作正常。但是在开发版本上,它将进入XAMPP的更高目录。如何设置服务器相对于站点的服务器根目录?

我的文件夹系统如下

htdocs  # where ../ is going in development
  sites
    site1  # ../ should go here in this site's folder, not any other site's folder
    site2  # ../ should go here in this site's folder, not site1
  xampp

您如何考虑多个网站?如果我强制将文档根目录移到site1,那么site2将如何正常运行?

3 个答案:

答案 0 :(得分:1)

使用base html代码...

可以省去很多麻烦

我通常做的是在我的引导程序文件中添加这样的内容:

define('BASE_URL', 'http://localhost/site1'); // for development
// define('BASE_URL', 'http://somesite.com'); // for production

这是两个单独的文件。

然后你会进入<head>标签:

<base href="<?php echo BASE_URL ?>"/>

现在,您网页中的所有相关链接都与<base>标记上声明的路径相关。

编辑:

哦,对不起,没注意这种可能的混乱。 Bootstrap是PHP程序员给初始配置文件的名称。通常,我把它放在我的网站root中的conf目录中:

- mysite
--- conf
----- bootstrap.php
--- assets
----- js
----- css
--- src
--- test
-- index.php

我的bootstrap.php文件总是定义我的应用程序根目录:

define('APP_ROOT', dirname(__DIR__)); // since it's inside /conf/ dir.

这可能会解决PHP中相关目录的问题。

然后,在我的index.php,我的根,我在第一行有这个:

require 'conf/bootstrap.php';

我使用单个入口点(index.php文件),所以我只需要执行一次。如果您有多个顶级页面,则必须在每个页面中包含此页面。

如果您将生产引导程序保留在服务器中,并将开发版本保留在localhost上,则可以忘记它。

答案 1 :(得分:0)

您应该在apache中设置虚拟目录,或者您可以在模板的head部分添加html标记“base”以设置所有URL的基础。见http://www.w3schools.com/tags/tag_base.asp

实际上如果使用php生成模板,可以在php中生成绝对URL。

答案 2 :(得分:0)

我建议使用HTML的base element

  

此属性指定绝对URI,该URI充当解析相对URI的基URI。

您现在可以在应用程序中使用相对URI,并且只需在移植到其他站点时(动态)更改href上的<base>属性。