解决方案:我必须将允许/拒绝指令放在第一个 Directory 指令内(该指令也恰好用于根目录)。我猜是因为它有一个 AllowOverride None,不允许任何子级指定允许/拒绝?
<目录 /> 选项 FollowSymLinks AllowOverride 无 命令允许、拒绝 允许所有人 拒绝来自 xxx.xx.xxx.xx </目录>
原来的:
此配置在 apache 重启后仍然允许访问所有 IP
<VirtualHost *:80>
ServerName www.xxx.com
DocumentRoot /var/www/vhosts/xxx
<Directory /var/www/vhosts/xxx>
Options Indexes FollowSymLinks
AllowOverride none
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
</VirtualHost>
答案1
这应该可行。我刚刚在我的服务器上验证了你的代码,以确保我没有发疯。你确定你没有在这个定义之前有一个优先的定义吗?
在服务器上的文件夹中创建一个测试文件。类似于 test.txt。您可能会发现在浏览器中加载该 URL 时看不到它。如果是这种情况,则上面的定义将被跳过。
答案2
对于您想要执行的操作,即仅允许 127.0.0.1,您应该执行以下操作:
Order Allow,Deny
Allow from 127.0.0.1
首先说的是allow
事物,然后deny
是事物,以及deny
不匹配的事物。
你也不应该把你的<Directory>
块放在你的<VirtualHost>
块里面,而是放在它前面。
答案3
这是 Plesk 系统吗?有时您必须观察各种 http 包含内容的编译方式。后面的包含文件中可能会有某些内容覆盖您的第一个语句。
答案4
谢谢。这个代码有效。
名称虚拟主机 127.0.0.1
名称虚拟主机 192.168.44.141
<VirtualHost 127.0.0.1 192.168.44.141>
#ServerName localhost.com
ServerName www.localhost.com
DocumentRoot "E:/abcd"
<Directory "E:/abcd/files">
Options Indexes FollowSymLinks
AllowOverride none
Order allow,deny
Allow from 192.168.44.128
Deny from all
</Directory>
</VirtualHost>