在 htdocs 文件夹之外制作 XAMPP / Apache 服务文件 [关闭]

Posted

技术标签:

【中文标题】在 htdocs 文件夹之外制作 XAMPP / Apache 服务文件 [关闭]【英文标题】:Make XAMPP / Apache serve file outside of htdocs folder [closed] 【发布时间】:2010-09-05 07:26:29 【问题描述】:

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

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

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

而我的xampp 文件通常来自:

C:\xampp\htdocs\

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

编辑:编辑以将 Apache 添加到问题标题中,以使 Q/A 更“可搜索”

【问题讨论】:

我认为这些标签应该足够可搜索。 Andrew Koper,我同意,但此时整个堆栈交换生态圈中普遍存在的严厉不友好程度并不令人惊讶。 ¯_(ツ)_/¯ 可能离题,但只是想提示:有时一个选项是将目录移动到您的“htdocs”文件夹中,例如。如果您希望能够在 localhost 中打开 Google Drive 中的文件 ;) (***.com/questions/41751330/…) 在 ubuntu 上,只需要一个符号链接。 (brettclapper.wordpress.com/2012/07/06/…) 除了所有的答案,我想补充一个。从 PHP 5.4.0 开始,您可以使用命令行移动到项目根目录并执行 php -S <host>:<port>。例如php -S localhost:80. 【参考方案1】:

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

例如以下将不起作用, DocumentRoot "X:/webroot"

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

【讨论】:

它适用于我的映射网络驱动器。【参考方案2】:

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

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

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Allow from all
</Directory> 

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

【讨论】:

仅适用于支持符号链接的文件系统。没有解释为什么不应该使用这个选项。【参考方案3】:

好的,根据 pix0r's、Sparks' 和 Dave's 的回答,看起来有三种方法可以做到这一点:


Virtual Hosts

    打开 C:\xampp\apache\conf\extra\httpd-vhosts.conf。 取消注释 ~ 第 19 行 (NameVirtualHost *:80)。

    添加您的虚拟主机(~第 36 行):

    <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)。

    添加

    127.0.0.1 transitcalculator.localhost #transitCalculator
    

    到文件末尾(在 Spybot - Search & Destroy stuff if you have installed)之前。

    保存(您可能必须将其保存到桌面,更改旧主机文件的权限(右键单击 > 属性),然后将新文件复制到旧文件的目录中(或重命名旧文件),如果您正在使用 Vista 并遇到问题)。 重新启动 Apache。

现在您可以通过浏览到 http://transitcalculator.localhost/ 来访问该目录。


Make an Alias

    http.conf 文件的 ~line 200 开始,复制 &lt;Directory "C:/xampp/htdocs"&gt;&lt;/Directory&gt; 之间的所有内容(~line 232)并将其粘贴到下面,并将 C:/xampp/htdocs 替换为您想要的目录(在这种情况下C:/Projects) 为您的服务器提供新目录的正确权限。

    找到 &lt;IfModule alias_module&gt;&lt;/IfModule&gt; 部分(~第 300 行)并添加

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

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


Change your document root

    在 C:\xampp\apache\conf\httpd.conf 中编辑~第 176 行;将DocumentRoot "C:/xampp/htdocs" 更改为#DocumentRoot "C:/Projects"(或任何你想要的)。

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


注意事项:

您必须使用正斜杠“/”而不是反斜杠“\”。 不要在末尾包含尾随“/”。 重启你的服务器

【讨论】:

在步骤 (3) 中编辑 C:\Windows\System32\drivers\etc\hosts。首先以管理员身份运行编辑器(Notepad、Notepad++ 或任何编辑器)的最佳实践。所以可以直接保存到C:\Windows\System32\drivers\etc\文件夹下。 如果遇到 403 错误,请参阅 this link 在 Win7 上使用 Order allow,deny Allow from all 返回 403 错误,因为此选项已弃用。使用要求全部授予。 ***.com/questions/9110179/… 仅供参考,我似乎不需要执行此步骤:取消注释第 19 行 (NameVirtualHost *:80) 使用Order allow,deny Allow from all 对我不起作用,但Require all granted 起作用。【参考方案4】:

VirtualHost 也适用于此,并且可能更适合您,因为您可以托管多个项目而无需子目录。以下是你的做法:

httpd.conf(或额外的\httpd-vhosts.conf 相对于httpd.conf。斜杠“\”可能会导致它不起作用):

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):

# localhost entries
127.0.0.1 localhost transitcalculator.localhost

现在重启XAMPP,你应该可以访问http://transitcalculator.localhost/,它会直接映射到那个目录。

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

<img src="/images/logo.png"  />

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

【讨论】:

我的 PC 上有多个网络驱动器已映射到驱动器号(例如 X:\myfolder)。当我使用此方法时,我收到“禁止访问”警告。这是否意味着 Apache 用户没有对该驱动器的读取权限? Directory 下,将Order allow,denyAllow from all 替换为Require all granted。见***.com/questions/9110179/…【参考方案5】:

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

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

编辑:

别名 myapp c:\myapp\

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

【讨论】:

【参考方案6】:

您可以通过编辑 XAMPP\apache\conf\httpd.conf 中的 DocumentRoot 设置来重新定位它。

目前应该是:

C:/xampp/htdocs

改成:

C:/projects/transitCalculator/trunk

【讨论】:

不要忘记在要求 DocumentRoot 的两行中编辑它。如果您只更改最上面的一项,则会出现读取访问错误等。 这也适用于 XAMP mac 吗? 现在通过哪个网址可以访问索引页?

以上是关于在 htdocs 文件夹之外制作 XAMPP / Apache 服务文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 htdocs 或 xampp 文件夹之外的 cmd 启动任何项目? [复制]

尝试在文档根目录之外下载文件的 xampp 问题

如何将 xampp localhost 更改为另一个文件夹(在 xampp 文件夹之外)?

如何在 XAMPP 的 VirtualHost 中访问 DocumentRoot 之外的文件?

如何从远程计算机浏览到 htdocs 之外的网站

XAMPP 指向根文件夹外的文件