我的 Apache 服务器有一个虚拟主机配置:
<VirtualHost *:80>
DocumentRoot "/app/www"
ServerName myhostname
<Directory "/app/www">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
我想只允许访问myhostname
作为主机名的请求。但我想拒绝主机名或服务器 IP 发出的所有其他请求:
http://myhostiname/ ALLOW
http://1.2.3.4/ (this is one of the server ip addresses) DENY
我的虚拟主机配置按预期工作。
现在我必须编辑配置以让用户通过 ip 访问一个特定路径,因为客户端无法解析本地主机名。
这是一个例子:
http://myhostiname ALLOW
http://1.2.3.4/ DENY
http://1.2.3.4/any/path DENY
http://1.2.3.4/allowed/path ALLOW
http://1.2.3.4/allowed/path/subpath ALLOW
我在新的虚拟主机中尝试了该<Location>
元素:
<VirtualHost 0.0.0.0:80>
DocumentRoot "/app/www"
<Directory "/app/www">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<Location "/">
AllowOverride None
Order Deny,Allow
Deny from all
</Location>
<Location "^/allowed">
Allow from all
</Location>
</VirtualHost>
但这拒绝了除了主机名请求之外的所有内容。我错过了什么?
我会将您的虚拟主机配置拆分为两个或更多虚拟主机。可以在一个虚拟主机中完成所有操作,但我发现“分离的”配置更易于阅读和记录。