XAMPP中的根路径

时间:2013-12-11 11:11:27

标签: php html apache xampp

我有一段时间没遇到这个问题了,并且没有成功搜索到答案。

 <img src="/images/test.jpg" /> 

从(根路径 - 在我的情况下在LAMP中的生产中)获取图像

 htdocs/images/test.jpg 

是否从htdocs / index.php或htdocs / foo / bar / index.php调用

我在开发中使用XAMPP,而htdocs内部有项目文件夹,所以上面描述的方法虽然可以在live时使用,但我需要将其改为:

<img src="/projectName/images/test.jpg" /> 

在本地工作时。

为了使这更简单,我定义了一个常量BASE,我在开发中使用:

define('BASE','/projectname/) 

然后当它生效时我改为:

define('BASE','/')

<img src="<?php echo BASE;?>images/test.jpg" />

这显然很烦人,最终导致了几个问题。请有人了解这种情况,我特别想要做的是在我的图像/脚本源中使用根路径但是:

<img src="/images/test.jpg" />

从htdocs / projectName / foo / test.php

调用时

在以下位置查找图片:

htdocs/projectName/images/

这可能吗?

6 个答案:

答案 0 :(得分:5)

处理此问题的另一种方法是使用虚拟主机。

虚拟主机的作用类似于localhost的第二个版本,专门用于子文件夹。例如,您可以设置Apache,以便在您访问http://example(无.com或其他任何内容)时,它会显示http://localhost/example/中的内容。所有CSS和JavaScript以及链接都会像在网站的根文件夹中操作一样,因为领先的example文件夹已经从网址中删除了。

我找不到曾经用于XAMPP的a walkthrough,但这里有一个涵盖所有要点的类似的。它是为Windows编写的,但我想有一些类似的机制可以用于LAMP:

总结一下,这是文章告诉你的事情:

  • 在Apache中启用虚拟主机
  • 进行设置,以便在您访问example时,您会收到127.0.0.1
  • 配置Apache,以便当有人访问127.0.0.1(但网站名称为example)时,它会显示example文件夹中的内容。

这就是您的制作网站(具有多个网站的单个服务器)对每个网站都有不同的“根”。

答案 1 :(得分:3)

您是否考虑过html内容标题中的基本标记? http://www.w3schools.com/tags/tag_base.asp

<head>
    ...
    <base href="<$path />">
    ...
</head>

获取基本路径:

$path = $_SERVER['SERVER_NAME'] == 'production.host' ? '/' : 'projectName';

答案 2 :(得分:2)

您可以尝试此线程中其他人提供的解决方案(编程解决方案),或者作为替代方案,我会做一些不同的事情(设置解决方案)。

对我来说,我喜欢创建一个独立的环境,我的项目和开发文件尽可能与XAMPP分开(我使用XAMPP,但原则适用于其他托管环境)。这使我可以轻松地为XAMPP安装新的更新,而不必担心我的项目,而且我也希望将我的所有项目都放在一个专门用于开发的文件夹中。此开发文件夹将包含用于Web,移动和其他环境的项目。

我设置它的方式是,我有一个c:\dev\文件夹,其中包含我的项目列表,每个项目都是独立的。例如,c:\dev\project1\c:\dev\project2\等等。

现在,在我为开发创建这些文件夹之后,我确保httpd-vhosts.conf文件(位于c:\xampp\apache\conf\extra\)和hosts文件(位于c:\Windows\System32\drivers\etc\)有正确的参考资料。

让我们假设我的一个项目被称为project1。它通常位于c:\xampp\htdocs\project1,然后我通常会通过浏览器访问http://localhost/project1

但是,为了拥有一个独立的环境,并且如前所述,我将在名为c:的{​​{1}}驱动器中创建一个开发文件夹,然后我会将c:\dev移入其中,最后得到project1

然后,要通过在网络浏览器中输入c:\dev\project1来访问此项目,我附加了位于project1.dev的{​​{1}}文件,如下所示:

httpd-vhosts.conf

另外,我必须更新c:\xampp\apache\conf\extra\文件(位于<VirtualHost project1.dev:80> ServerAdmin admin@project1.dev DocumentRoot "C:/dev/project1" ServerName project1.dev ServerAlias www.project1.dev ErrorLog "logs/project1.dev.error.log" CustomLog "logs/project1.dev.access.log" combined <Directory "C:/dev/project1"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory> </VirtualHost> ,并添加以下条目:

hosts

(其中127.0.0.1与 localhost 相同。另请注意,您必须在c:\Windows\System32\drivers\etc\别名的127.0.0.1 project1.dev 127.0.0.1 www.project1.dev 文件中添加第二个条目。

这允许我以hosts

的形式访问我的项目

设置完成后,我现在可以为我的开发和生产环境一致地编写代码,并且我对root的引用也能正常工作。

此外,通过此设置,我不在乎我是否需要更新我的XAMPP或切换到LAMP或其他任何东西,我关心的只是确保我只处理一个文件,这是我的设置文件{{ 1}}。正如我所提到的,我总是希望有一个单独的文件夹进行开发,我可以在开发环境中使用不同类型的项目,例如移动项目,Web项目等等。

希望这有帮助。


关于多站点(子域设置)的注意事项

如果您想设置多站点(子域设置),那么根据WordPress说明启用WordPress for multisite后,您必须执行以下操作:

假设您想要多站点的以下结构:

www

然后您必须将以下条目添加到http://project1.dev

httpd-vhosts.conf

并更新project1.dev www.project1.dev (this is an alias to project1.dev) sub.project1.dev (this is another setup, subdomain) 文件以包含

httpd-vhosts.conf

请注意,<VirtualHost sub.project1.dev:80> ServerAdmin admin@project1.dev DocumentRoot "C:/dev/project1" ServerName sub.project1.dev ErrorLog "logs/sub.project1.dev.error.log" CustomLog "logs/sub.project1.dev.access.log" combined <Directory "C:/dev/project1"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory> 指向主站点和子域站点的同一目录。

对您在WordPress网络中添加的每个新子域重复此过程。

答案 3 :(得分:1)

我认为最好的方法是使用baseurl,在配置中设置baseurl并将其用于外部文件。

$config = new Config();
public $baseurl = "http://dev050.nl";

您可以将其用作

$config->baseurl;

也许这对你来说很有趣: http://twig.sensiolabs.org/

希望它有所帮助。

答案 4 :(得分:1)

如果对您有任何用处,我会在我的开发服务器和托管服务器之间切换数据库。没理由它不适用于基本URL。

// db connect
if($_SERVER['SERVER_NAME'] != "dev.mydomain.org"){
    try{
        $pdo = new PDO('mysql:host=mysql.***.net;dbname=***;charset=utf8', '***', '***');
    }catch(PDOException $ex){
        header('Location: error_db.php');
    }
}else{
    try{
        $pdo = new PDO('mysql:host=localhost;dbname=***;charset=utf8', '***', '***');
    }catch(PDOException $ex){
        header('Location: error_db.php');
    }
}

答案 5 :(得分:0)

一种可能的解决方案是使用mod_rewrite自动更改开发服务器上的路径

RewriteCond %{HTTP_REFERER} ^https?://localhost/testsite/
RewriteCond %{REQUEST_URI} \.(jpg|gif|png|bmp)$
RewriteRule ^ /testsite/$1

我相信上面的mod_rewrite规则是正确的,但最好自己验证一下。