【问题标题】:Root path in XAMPPXAMPP 中的根路径
【发布时间】:2013-12-29 07:57:47
【问题描述】:

我遇到这个问题已经有一段时间了,但没有成功地寻找答案。

 <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/

这可能吗?

【问题讨论】:

    标签: php html apache xampp


    【解决方案1】:

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

    对我来说,我喜欢创建一个独立的环境,在这个环境中我的项目和开发文件尽可能与 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: 驱动器中创建一个名为c:\dev 的开发文件夹,然后将project1 移动到其中,并以@ 结束987654334@

    然后,为了通过在 Web 浏览器中输入 project1.dev 来访问该项目,我将位于 c:\xampp\apache\conf\extra\httpd-vhosts.conf 文件附加如下:

    <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 文件(位于c:\Windows\System32\drivers\etc\,并添加以下条目:

    127.0.0.1    project1.dev
    127.0.0.1    www.project1.dev
    

    (其中 127.0.0.1 与您的 localhost 相同。另请注意,您必须在 hosts 文件中为 www 别名添加第二个条目。

    这使我可以通过以下方式访问我的项目:http://project1.dev

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

    另外,通过这个设置,我不在乎是否需要更新我的 XAMPP 或切换到 LAMP 或其他任何东西,我只关心确保我只处理一个文件,这是我的设置文件 @987654345 @。正如我所提到的,我总是喜欢有一个单独的文件夹用于开发,并且我可以在开发环境中拥有不同类型的项目,例如,移动项目、Web 项目等。

    希望这会有所帮助。


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

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

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

    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>
    

    并更新hosts 文件以包含

    127.0.0.1    www.project1.dev
    

    请注意,DocumentRoot 指向主站点和子域站点的同一目录。

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

    【讨论】:

      【解决方案2】:

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

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

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

      总而言之,以下是本文告诉您的操作:

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

      这就是您的生产站点(即具有多个网站的单个服务器)如​​何为每个网站设置不同的“根”。

      【讨论】:

      • 谢谢,这正是我想要的,将在 23 小时内奖励赏金。
      • 刚刚实现了这个,它工作得很好,再次感谢@Chris
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        获取基本路径:

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

        【讨论】:

        • 是的,在那里定义它或者我目前的做法仍然需要在开发和生产之间编辑它的定义,因为它仍然在变化
        • 生产和开发模式选择,可以使用$_SERVER['SERVER_NAME']
        【解决方案5】:

        如果对您有用的话,我会做类似的事情来在我的开发服务器和托管服务器之间切换数据库。没有理由它不适用于基本 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');
            }
        }
        

        【讨论】:

          【解决方案6】:

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

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

          你可以把它当做

          $config->baseurl;
          

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

          希望对您有所帮助。

          【讨论】:

          • 谢谢,但我正在寻找一种无需编辑即可上线的解决方案。
          • @JohnnyFaldo 这个解决方案应该适合你。您需要做的就是创建一个 config.php 文件,其中包含所有部署特定变量,并在您的 PHP 文件中添加include()
          • @AeroX 这就是我目前所做的,我有 config.php,其中包括定义基本 url 并全面包含在内。我需要的是一种方法(或替代方法)xampp 使用 htdocs 中的子文件夹,其中项目作为基本根目录,而不是它的父文件夹 httpdocs
          猜你喜欢
          • 2015-01-29
          • 2011-07-16
          • 2017-03-04
          • 1970-01-01
          • 2013-01-09
          • 2015-04-19
          • 2013-06-30
          • 2017-01-04
          • 2023-03-30
          相关资源
          最近更新 更多