使XAMPP / Apache在htdocs之外提供文件

时间:2020-03-05 18:37:35  来源:igfitidea点击:

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

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

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

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

C:\ xampp \ htdocs \

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

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

解决方案

回答

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

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

编辑:

别名myapp c:\ myapp \

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

回答

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

当前应该是:

C:/xampp/htdocs

更改为:

C:/projects/transitCalculator/trunk

回答

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

虚拟主机

  • 打开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-搜索并销毁文件之前,如果已安装)。

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

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

进行别名

  • 从http.conf文件的第200行开始,复制<Directory" C:/ xampp / htdocs"></ Directory>之间的所有内容(〜232行),然后将其立即粘贴到C下: / xampp / htdocs替换为所需的目录(在本例中为C:/ Projects),以为服务器提供对新目录的正确权限。
  • 找到" <IfModule alias_module> </ IfModule>"部分(〜第300行)并添加
Alias /transitCalculator "C:/Projects/transitCalculator/trunk"

(或者与需求相关的任何信息)在模块标签内的Alias注释框下方。

更改文件根

  • 在C:\ xampp \ apache \ conf \ httpd.conf中编辑第176行;将DocumentRoot" C:/ xampp / htdocs"更改为#DocumentRoot" C:/ Projects"`(或者我们想要的任何名称)。
  • 编辑203行以匹配新位置(在本例中为C:/ Projects)。

笔记:

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

回答

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"目录相对于当前文件的位置。

回答

这些解决方案都不容易。
这是允许Apache 2托管htdocs之外的网站的最简单解决方案:

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

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

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