关于php:在htdocs之外使XAMPP / Apache服务文件

关于php:在htdocs之外使XAMPP / Apache服务文件

Make XAMPP/Apache serve file outside of htdocs

是否可以将xampp配置为提供htdocs目录之外的文件?

例如,假设我有一个位于以下位置的文件:

C:\projects\transitCalculator\trunk\TransitCalculator.php

我的xampp文件通常从以下位置提供:

C:\xampp\htdocs\

(因为这是默认配置)是否有某种方法可以使Apache识别并提供我的TransitCalculator.php文件而不将其移动到htdocs下? 最好是我希望Apache提供/具有对projects目录的全部内容的访问权限,并且我不想将projects目录移到htdocs下。

编辑:编辑以将Apache添加到问题标题,以使问题/答案更"可搜索"


好的,按照pix0r,Sparks和Dave的回答,看来有三种方法可以做到这一点:

虚拟主机

  • 打开C: xampp apache conf extra httpd-vhosts.conf。
  • 取消注释?行19(NameVirtualHost *:80)。
  • 添加您的虚拟主机(第36行):

    1
    2
    3
    4
    5
    6
    7
    8
    <VirtualHost *:80>
        DocumentRoot C:\Projects\transitCalculator\trunk
        ServerName transitcalculator.localhost
        <Directory C:\Projects\transitCalculator\trunk>
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
  • 打开您的主机文件(C: Windows System32 drivers etc hosts)。

  • 1
    127.0.0.1 transitcalculator.localhost #transitCalculator

    到文件末尾(在Spybot-搜索并销毁文件之前,如果已安装)。

  • 保存(您可能需要将其保存到桌面,更改旧主机文件的权限(右键单击>属性),然后将新文件复制到旧文件上的目录中(或重命名旧文件),如果使用的是Vista并有麻烦)。
  • 重新启动Apache。
  • 现在,您可以通过浏览到http://transitcalculator.localhost/来访问该目录。

    进行别名

  • http.conf文件的?第200行开始,复制之间的所有内容(?第232行),然后将其粘贴到下面,并用C:/xampp/htdocs替换为所需的目录(在本例中为C:/Projects),得到您的服务器对新目录的正确权限。

  • 找到部分(?第300行)并添加

    1
    Alias /transitCalculator"C:/Projects/transitCalculator/trunk"

    (或与您的需求相关的任何内容)在模块标签内的Alias注释块下方。

  • 更改文件根

  • 在C: xampp apache conf httpd.conf中编辑?176行;将DocumentRoot"C:/xampp/htdocs"更改为#DocumentRoot"C:/Projects"(或您想要的任何内容)。

  • 编辑?203行以匹配您的新位置(在本例中为C:/Projects)。

  • 笔记:

    • 您必须使用正斜杠" /"而不是反斜杠""。
    • 不要在结尾加上" /"。
    • 重新启动服务器。

    您可以通过在XAMPP apache conf httpd.conf中编辑DocumentRoot设置来重新放置它。

    当前应该是:

    C:/xampp/htdocs

    更改为:

    C:/projects/transitCalculator/trunk


    VirtualHost也可以解决这个问题,并且可以更好地为您服务,因为您可以托管多个项目而无需子目录。这是您的操作方式:

    httpd.conf(或相对于httpd.conf的extra httpd-vhosts.conf。结尾的斜线""可能导致其无法正常工作):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    NameVirtualHost *:80
    # ...
    <VirtualHost *:80>  
        DocumentRoot C:\projects\transitCalculator\trunk\
        ServerName transitcalculator.localhost
        <Directory C:\projects\transitCalculator\trunk\>  
            Order allow,deny  
            Allow from all  
        </Directory>
    </VirtualHost>

    HOSTS文件(通常为c: windows system32 drivers etc hosts):

    1
    2
    # localhost entries
    127.0.0.1 localhost transitcalculator.localhost

    现在重新启动XAMPP,您应该可以访问http://transitcalculator.localhost/,它将直接映射到该目录。

    如果您要在生产环境中复制一个正在开发中的站点,该站点将位于域名的根目录上,则这可能会有所帮助。例如,您可以指向具有绝对路径的文件,这些文件将带入服务器:

    1
    <img src="/images/logo.webp" alt="My Logo" />

    而在使用别名或子目录的环境中,您需要准确跟踪" images"目录相对于当前文件的位置。


    您可以将Apache设置为不受任何限制地从任何地方提供页面,但通常以更安全的形式分发。

    编辑apache文件(http.conf是更常用的名称之一)将允许您设置任何文件夹,使其显示在您的webroot中。

    编辑:

    别名myapp c: myapp

    我已经编辑了答案,以包括在http.conf文件中创建别名的格式,这有点像Windows中的快捷方式或un * x下的符号链接,其中Apache"假装"了一个文件夹在webroot中。从长远来看,这可能对您更有用。


    如果要使XAMPP使用网络驱动器作为文档根目录,则必须在httpd.conf中使用UNC路径。 XAMPP无法识别您映射的网络驱动器。

    例如,以下操作无效,
    DocumentRoot" X:/ webroot"

    但这会
    DocumentRoot" //192.168.10.100/webroot"(注意正斜杠,而不是反斜杠)


    允许Apache 2托管htdocs之外的网站的解决方案:

    在httpd.conf中的" DocumentRoot"指令下,您应该看到一个目录块。将此目录块替换为:

    1
    2
    3
    4
    5
    <Directory />
        Options FollowSymLinks
        AllowOverride All
        Allow from all
    </Directory>

    切记不要在真实环境中使用此配置


    推荐阅读