使XAMPP / Apache在htdocs之外提供文件[关闭]


304

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

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

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

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

C:\xampp\htdocs\

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

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


1
我认为这些标签应该足够可搜索。
icedwater

24
这个问题不应该被关闭。这是一个XAMPP问题。这是开发人员的问题。
Andrew Koper 2014年

15
我同意安德鲁·科佩尔(Andrew Koper)的观点,但这对于整个烟囱交易生态圈中粗暴的,不友好的地方流行程度而言并不令人惊讶。¯_(ツ)_ /¯–
cmcculloh

Maby脱离主题,但只想提示:有时,一种选择是将目录移到“ htdocs”文件夹中,例如。如果你想成为能够在本地主机在谷歌驱动器打开的文件;)(stackoverflow.com/questions/41751330/...
Gordova

2
除了所有答案,我还要补充一个。从PHP 5.4.0开始,您可以使用命令行移至项目根目录并执行php -S <host>:<port>。例如php -S localhost:80
radiantshaw

Answers:


362

好的,对于pix0rSparksDave的答案,看来有三种方法可以做到这一点:


虚拟主机

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

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

  5. 127.0.0.1 transitcalculator.localhost #transitCalculator

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

  6. 保存(您可能需要将其保存到桌面,更改旧主机文件的权限(右键单击>属性),然后将新文件复制到旧文件的目录中(或重命名旧文件)(如果使用) Vista并有麻烦)。
  7. 重新启动Apache。

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


进行别名

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

  2. 找到该<IfModule alias_module></IfModule>部分(〜行300)并添加

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

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


更改文件根

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

  2. 编辑〜203行以匹配您的新位置(在这种情况下为C:/Projects)。


笔记:

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

13
在步骤(3)中编辑C:\ Windows \ System32 \ drivers \ etc \ hosts。最佳实践是首先以管理员身份运行编辑器(Notepad,Notepad ++或任何编辑器)。因此,您可以直接保存到C:\ Windows \ System32 \ drivers \ etc \文件夹。
CallMeLaNN

3
如果您收到403错误,请参阅此链接
Wojtek Owczarczyk 2014年

21
在Win7上,使用Order allow,deny Allow from all将返回403错误,因为不建议使用此选项。使用要求全部授予。stackoverflow.com/questions/9110179/...
hywak

4
仅供参考,我似乎不需要执行此步骤:取消注释第19行(NameVirtualHost *:80)
Silverback 2014年

2
使用Order allow,deny Allow from all对我而言不起作用,但Require all granted有效。
丹尼·贝克特

96

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

当前应该是:

C:/ xampp / htdocs

更改为:

C:/项目/ transitCalculator / trunk


40
不要忘记在要求DocumentRoot的两行中对其进行编辑。如果你只改变了一个顶部,你会得到只读访问错误等
Arcolye

2
这也适用于XAMP mac吗?
愤怒的猕猴桃

现在通过哪个URL,可以访问索引页面?
Manish Kumar

49

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

httpd.conf(或相对于httpd.conf的extra \ httpd-vhosts.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" alt="My Logo" />

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


我的PC上有多个网络驱动器,这些网络驱动器已映射到驱动器号(例如X:\myfolder)。当我使用此方法时,会收到“禁止访问”警告。这是否意味着Apache用户没有对该驱动器的读取权限?
哈里格

1
Directory替换下Order allow,denyAllow from all带有Require all granted。见stackoverflow.com/questions/9110179/...
米歇尔

16

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

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

编辑:

别名myapp c:\ myapp \

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


10

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

例如,以下操作将不起作用,DocumentRoot“ X:/ webroot”

但这将是DocumentRoot“ //192.168.10.100/webroot”(注意正斜杠,而不是反斜杠)


它与我的映射网络驱动器配合正常。
肖恩·肯德尔

7

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

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

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

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


仅适用于支持符号的文件系统。没有解释为什么不应该使用此选项。
Danubian Sailor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.