Apache - 除选定内容外,所有内容均返回 404

Apache - 除选定内容外,所有内容均返回 404

我正在寻找方法来阻止访问 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文件中执行此操作可让您保持某些网站“解锁”。)

相关内容