【问题标题】:Wampserver 403 on named virtual hosts outside of /www/www 之外的命名虚拟主机上的 Wampserver 403
【发布时间】:2012-06-07 05:24:50
【问题描述】:

当我尝试在 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 工作正常。

【问题讨论】:

  • 您的文件系统权限是否允许访问?
  • 当然,为什么不呢?什么需要许可?
  • 默认情况下,并非所有系统都允许 Web 服务器用户帐户访问所有内容。
  • 什么是网络服务器用户帐户,如何允许其访问?
  • 我看到用户和组在 httpd.conf 中设置为“守护进程”,但在任务管理器中显示 httpd.exe 正在以 SYSTEM 身份运行。不过这并不重要。

标签: wamp virtualhost wampserver http-status-code-403


【解决方案1】:

我想我应该更仔细地查看 http.conf。没那么长,主要是cmets。麻烦的是这个。

# 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>

我把它注释掉了,现在一切正常,虽然我猜它不太安全,但它只是一个测试服务器。

我认为&lt;Directory "m:/Work/New MD9.ca/site/"&gt; 位应该可以处理它,但我猜不是。

【讨论】:

  • 很好的解决方案!我也在这里找到了这个http://reanweb.com/wordpress/step-step-guide-create-virtual-hosts-using-wamp/。万一有人试图找到整个过程
  • @Moss,虽然,您并不担心安全性,因为它是一个测试服务器,但我会向其他人提一下,您可以不注释该目录标签,以及另一个带有虚拟主机路径的目录标签web 文件夹,但使用“AllowOverride all”而不是“AllowOverride none”,这样既安全又可用。
【解决方案2】:

我知道这个问题现在已经过时了,而且你已经解决了,但我遇到了这个问题并在没有删除 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 目录中声明的相同规则

【讨论】:

    【解决方案3】:

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

    但是,接受的答案可能不是最佳解决方案,具体取决于您希望 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 虚拟主机提供)将在我的机器上存在的位置。这紧跟在&lt;Directory "d:/wamp/www/"&gt;&lt;/Directory&gt; 块之后。

    <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

    【讨论】:

      【解决方案4】:

      &lt;Directory&gt; 标签应该在&lt;VirtualHost *:80&gt;

      像这样:

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

      【讨论】:

        【解决方案5】:

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

        1) 确保 DocumentRoot 和 位置相同

        2) 仔细检查 标签中的“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) 检查配置文件语法:

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

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

        Syntax OK
        

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

        net stop dnscache
        net start dnscache
        

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

        【讨论】:

          猜你喜欢
          • 2011-11-21
          • 1970-01-01
          • 1970-01-01
          • 2015-05-19
          • 2012-08-18
          • 2014-04-03
          • 2013-07-12
          • 2013-11-05
          相关资源
          最近更新 更多