11

当我尝试在 c:/wamp/www/ 目录之外创建虚拟主机时,Wampserver 告诉我访问被拒绝。我可以在那个目录中做一个很好的。即使对文件夹进行符号链接也可以,但我宁愿不必使用符号链接。为什么它不起作用?

这是我在 httpd.conf 末尾使用的代码

NameVirtualHost *:80

<VirtualHost *:80>  
DocumentRoot "c:/wamp/www" 
ServerName localhost 
ServerAlias localhost 
</VirtualHost> 

<VirtualHost *:80>
ServerName local.cascade
DocumentRoot c:/wamp/www/cascade/
</VirtualHost>

<VirtualHost *:80>
ServerName local.md9
ServerAlias local.md9
DocumentRoot "m:/Work/New MD9.ca/site/"
</VirtualHost>

<Directory "m:/Work/New MD9.ca/site/">
    Order Allow,Deny
    Allow from All
</Directory>

“级联” vh 工作正常。

4

5 回答 5

26

我想我应该更仔细地查看 http.conf。时间不长,主要是评论。麻烦的是这个。

# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other 
# <Directory> blocks below.
#

<Directory />
    AllowOverride none
    Require all denied
</Directory>

我把它注释掉了,现在东西可以工作了,虽然我猜它不太安全,但它只是一个测试服务器。

我认为该<Directory "m:/Work/New MD9.ca/site/">位应该照顾它,但我想不是。

于 2012-06-03T04:44:11.100 回答
18

我知道这个问题现在已经过时了,你已经让它工作了,但我遇到了这个问题并在没有删除Require all denied标签的情况下解决了它。

您只需在目录标签中添加一个Require local(或Require all用于在线访问)标签。例如

<VirtualHost *:80>
    ServerName local.md9
    ServerAlias local.md9
    DocumentRoot "m:/Work/New MD9.ca/site/"

    <Directory "m:/Work/New MD9.ca/site/">
        Order Allow,Deny
        Allow from All
        Require local
    </Directory>
</VirtualHost>

您可以看到在 httpd.conf 的 DocumentRoot 目录中声明的相同规则

于 2013-01-03T10:28:04.923 回答
4

我有同样的问题,但在看了这个问题后设法解决了。

但是,接受的答案可能不是最佳解决方案,具体取决于您希望 Apache 配置的安全性。

我认为解决方案应该提到两件事,第一是确保安全性不受影响,第二是;了解 Apache 版本 2.2 和 2.4 之间访问控制配置的差异。

确保安全不受影响

注释掉建议的行:

<Directory />
    AllowOverride none
    Require all denied
</Directory>

据我了解,意味着您删除了应用于计算机上所有目录的默认严格安全性。其他人可以创建指向您的C:\very\sensitive\information目录的配置并将内容从那里提供给网站(这很可能是共享主机上的一个问题)。有趣的是,在该块上方进行了以下评论:

# First, we configure the "default" to be a very restrictive set of 
# features.

然后在该块下方:

# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.

锁定所有内容,然后有条件地解锁每个目录是完全有意义的。

我想出了以下内容,它指向我的所有网站(通过 Apache 虚拟主机提供)将在我的机器上存在的位置。这紧跟在<Directory "d:/wamp/www/"></Directory>块之后。

<Directory "d:/wamp/sites/">
    Options Indexes FollowSymLinks
    AllowOverride all
    Require all granted
</Directory>

然后在每个虚拟主机配置/别名中,您可以设置适用于该目录的配置。

访问控制配置的差异

在较新版本的 Apache 中配置访问控制已更改。

曾经是什么:

Order allow,deny
Allow from all

现在应该是:

Require all granted

欲了解更多信息:http ://httpd.apache.org/docs/current/upgrading.html

于 2014-10-01T12:25:29.283 回答
3

<Directory>标签应该在里面<VirtualHost *:80>

像这样:

<VirtualHost *:80>
ServerName local.md9
ServerAlias local.md9
DocumentRoot "m:/Work/New MD9.ca/site/"
    <Directory "m:/Work/New MD9.ca/site/">
        Order Allow,Deny
        Allow from All
    </Directory>
</VirtualHost>

另请注意,对于默认 www 文件夹之外,您应该使用 require 而不是 allow

<Directory />
    AllowOverride none
    Require all denied
</Directory>
于 2012-12-09T15:57:58.397 回答
1

如果您尝试了上述所有 .conf 编辑但均无效,请尝试以下附加步骤:

1) 确保 DocumentRoot 和 <Directory> 位置相同

2) 仔细检查 <VirtualHost> 标记中的“ServerName”域拼写,并检查 HOST 文件 (windows\system32\drivers\etc\hosts) 中域的拼写是否相同:

例子:

<VirtualHost *:80>
    DocumentRoot "D:/vhost_directory/website_directory"
    ServerName mywebsite.local
    <Directory "D:/vhost_directory/website_directory">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

3)检查conf文件语法:

cd \wamp\bin\apache\apache2.4.9\bin
httpd -t

4) 修复 conf 文件错误,直到获得输出:

Syntax OK

5)刷新域名缓存(必须以管理员身份运行控制台):

net stop dnscache
net start dnscache

6) 重启 Apache 服务或重启 WAMP 上的所有服务

于 2015-01-26T13:35:42.127 回答