这让我抓狂不已,我在网上搜索过各种答案,但都没有用。
我在 Windows 上使用 Apache 2.2.9,我的 httpd.conf 如下:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName MyLocalMachine.MyDomain.com
DocumentRoot "C:/MyFolder/"
<Directory "C:/MyFolder/SubDirectoryOne/SubDirectoryTwo">
Options -Indexes FollowSymLinks
AllowOverride All
Order allow,deny
</Directory>
ProxyPass /MyFolder/SubDirectoryOne/ http://ServerOne.MyDomain.com/MyFolder/SubDirectoryOne/
ProxyPassReverse /MyFolder/SubDirectoryOne/ http://ServerOne.MyDomain.com/MyFolder/SubDirectoryOne/
</VirtualHost>
答案1
您仅授予对子目录的访问权限,而 documentroot 没有权限。
也不要将“绝对”选项“FollowSymlinks”与相对选项(-Indexes)混合,您可以在所有选项中使用 +/- 或根本不使用,但不要混合。
该目录的正确配置是:
<Directory "C:/MyFolder/">
Options FollowSymlinks # Or Options -Indexes +FollowSymlinks
Allow from all
Order deny,allow
</Directory>
尝试一下这个,因为这“必须”允许访问 documentroot 和所有目录,但是如果您不指定 documentroot 而只指定子目录,那么您将无法访问 documentroot 下树中的其余目录。
边注:
另外,需要注意的是,ProxyPass 指令没有指定完整路径,而是相对于 DocumentRoot,所以您的 ProxyPass 应该是:
ProxyPass /SubdirectoryOne/ ...
一旦看到它有效,您就可以根据需要添加 AllowOverride all。尽管如果您有权访问主配置,您也根本不应该使用 .htaccess 文件,因为它仅适用于在某些目录中具有有限权限的用户,而不是管理员。它还会增加服务器的开销并使配置 apache 变得复杂。
答案2
不幸的是,您的配置确实没有什么意义。
当您使用 ProxyPass 将请求发送到另一个“后端”服务时,<Directory> 控制虚拟主机将请求映射到文件系统时 Apache 执行的操作。单个虚拟主机无法对同一请求执行两项操作。
我会首先向您拥有的每个虚拟主机(如果您有多个虚拟主机)添加单独的访问/错误日志,以验证请求是否到达您认为的位置。运行“httpd -S”以查看您定义了多少个虚拟主机。
“服务器配置拒绝客户端”的最常见原因详述如下:http://wiki.apache.org/httpd/ClientDeniedByServerConfiguration