我在重写规则 ('/admin') 中定义了一个 URL 路径,我想将其限制为仅 1 个 IP 地址的访问权限。我认为最好的方法是使用 .htaccess,而不是对其进行编码。我试过这个,但没有用。它阻止了所有 URL,而不仅仅是带有 /admin 的 URL。
<Location /admin>
Deny from all
Allow from x.x.x.x
</Location>
答案1
.htaccess 文件中不允许使用 Location 指令。否则,您可以在 Apache 配置文件/虚拟主机文件中添加以下行。
答案2
您可以使用 RewriteRule 的 [F] 标志拒绝除允许的 IP 之外的所有 IP 的访问。请参阅以下示例(我没有测试过,但我认为它是正确的)。如果您想使用 allow 指令,另一种方法是使用 Rewrite 指令使用 RewriteRule 的 [E=...] 标志设置环境变量,然后从 env=environment_var_goes_here 执行 Allow(请参阅http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow)
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/admin.*
RewriteCond %{REMOTE_ADDR} !^x\.x\.x\.x$
RewriteRule .* - [F]
注意:我编写该示例是为了匹配以 /admin 开头的任何 URL,但如果您只想匹配 /admin,请删除 .* 并将其替换为 $。