Apache - 使用 .htaccess 仅对根目录抛出 403,特定 IP 除外
Apache - using .htaccess to throw 403 for root directory only, except of particular IPs
我的 apache 服务器 可以通过 public IP 和指向该 IP 的域从 Internet 访问。
我要实现的是:
当用户尝试使用域或 public IP 访问服务器的 根目录 /
时,因此 http://example.com/
或http://178.37.8.6/
,他得到403禁止
但是,当用户对任何特定文件或目录使用完整 URL 时,服务器 表现如常(因此文件可以访问,并且目录 return 典型列表)
例如http://example.com/casual_directory/
、http://example.com/awesome_file.html
以上规则不适用当我从本地网络访问服务器时,使用本地服务器的 ip 地址 - 192.168.44.100
或 10.44.0.1
我现在得到的:
RewriteEngine on
RewriteCond %{SERVER_NAME} !=192.168.44.100
RewriteCond %{SERVER_NAME} !=10.44.0.1
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^. - [F,L]
虽然我认为关于 ip 地址的两个条件都可以正常工作,但我正在努力为根目录制定正确的规则。
我已经检查过,根目录的 REQUEST_URI
和 REQUEST_FILENAME
return 是相同的,即“/
”
很可能我无法在那里编写正确的正则表达式。
我花了很多时间做研究,i.a。 here, here, here, also here, here as well, even there,
here is a bit different case
但是它们都没有像预期的那样工作,有一次它对任何 url 都不可访问,另一次它根本不起作用.
@edit 26.12.2015
几个星期后我不得不重新启动我的服务器(这并不经常发生)并注意到 access do root dir /
现在被禁止 甚至在我的本地网络中(直到现在它按预期工作)。
我不得不更正 所以现在我的配置是这样的:
<DirectoryMatch "^/var/www/$">
Require all denied
Require ip 192.168.44.0/24
Require ip 10.44.0.0/24
</DirectoryMatch>
您可能必须在 Apache 虚拟主机配置中使用目录指令来完成您想要的。对于阿帕奇 2.4
<DirectoryMatch "^/path/to/root/$">
Require all denied
Require ip 192.168.44.100
Require ip 10.44.0.1
</DirectoryMatch>
<DirectoryMatch "^/path/to/root/*/">
Require all granted
</DirectoryMatch>
我的 apache 服务器 可以通过 public IP 和指向该 IP 的域从 Internet 访问。
我要实现的是:
当用户尝试使用域或 public IP 访问服务器的 根目录
/
时,因此http://example.com/
或http://178.37.8.6/
,他得到403禁止但是,当用户对任何特定文件或目录使用完整 URL 时,服务器 表现如常(因此文件可以访问,并且目录 return 典型列表)
例如http://example.com/casual_directory/
、http://example.com/awesome_file.html
以上规则不适用当我从本地网络访问服务器时,使用本地服务器的 ip 地址 -
192.168.44.100
或10.44.0.1
我现在得到的:
RewriteEngine on
RewriteCond %{SERVER_NAME} !=192.168.44.100
RewriteCond %{SERVER_NAME} !=10.44.0.1
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^. - [F,L]
虽然我认为关于 ip 地址的两个条件都可以正常工作,但我正在努力为根目录制定正确的规则。
我已经检查过,根目录的 REQUEST_URI
和 REQUEST_FILENAME
return 是相同的,即“/
”
很可能我无法在那里编写正确的正则表达式。
我花了很多时间做研究,i.a。 here, here, here, also here, here as well, even there,
here is a bit different case
但是它们都没有像预期的那样工作,有一次它对任何 url 都不可访问,另一次它根本不起作用.
@edit 26.12.2015
几个星期后我不得不重新启动我的服务器(这并不经常发生)并注意到 access do root dir /
现在被禁止 甚至在我的本地网络中(直到现在它按预期工作)。
我不得不更正
<DirectoryMatch "^/var/www/$">
Require all denied
Require ip 192.168.44.0/24
Require ip 10.44.0.0/24
</DirectoryMatch>
您可能必须在 Apache 虚拟主机配置中使用目录指令来完成您想要的。对于阿帕奇 2.4
<DirectoryMatch "^/path/to/root/$">
Require all denied
Require ip 192.168.44.100
Require ip 10.44.0.1
</DirectoryMatch>
<DirectoryMatch "^/path/to/root/*/">
Require all granted
</DirectoryMatch>