我正在寻找方法来阻止访问 Wordpress 管理文件夹“wp-admin”,但我还需要 apache 为所有 IP(但不是选定的 IP)生成 404 错误(未找到)。我找到了这篇文章未经授权的尝试返回 404 代码并尝试了重写解决方案,但对我来说不起作用。
因此我将所有网站保存在 /usr/local/www/apache22/data 中,并尝试在 httpd.conf 中使用此类配置(Apache2.2 FreeBSD 9.1)
<Directory "/usr/local/www/apache22/data">
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !=77.120.9.3 [OR]
RewriteCond %{REMOTE_ADDR} !=77.120.9.5
RewriteRule ^wp-admin($|/) - [L,R=404]
</Directory>
例如,网站的 wp-admin 位置为:/usr/local/www/apache22/data/doman.com/wp-admin
答案1
好的,首先我要说的是,你的整个前提都是有缺陷的:许多除了存在之外,还有其他方法/wp-admin
可以确定您正在使用 Wordpress。您正在尝试通过隐蔽性实现安全,而且由于您没有掩盖所有内容,因此您做得并不是特别优雅。
除了这些固有的问题之外,乍一看你的观点RewriteRule
似乎是错误的。
Apache 文档:
什麼是匹配?
在 VirtualHost 上下文中,模式最初将与 URL 中主机名和端口之后、查询字符串之前的部分进行匹配(例如“/app1/index.html”)。
在目录和 htaccess 上下文中,模式最初将与文件系统路径进行匹配,在删除引导服务器到当前 RewriteRule 的前缀之后(例如“app1/index.html”或“index.html”,具体取决于指令的定义位置)。
wp-admin
简单来说,这意味着如果你想在Directory
上下文中执行此操作(如) ,你需要在规则中添加更多路径^domain.com/wp-admin($|/)
。简单/天真的解决方法是将正则表达式更改为^.*wp-admin($|/)
,然后匹配任何事物包含wp-admin
(这也是验证规则本身是否正在被解析的好方法)。
但是,如果您坚持追求这种“安全”途径,我建议您在VirtualHost
上下文(或/wp-admin/.htaccess
文件)中而不是在Directory
整个服务器的上下文中进行此更改。这样既容易编写又更强大。(如果您服务器上的某个人不想锁定他们的 wordpress 管理页面(可能有很多人不想这样做——例如任何拥有动态 IP 的人),您当前的解决方案就会失效。在每个文件VirtualHost
或.htaccess
文件中执行此操作可让您保持某些网站“解锁”。)