Apache – 返回所有select的execept 404

我正在寻找方法,以防止访问WordPress的pipe理文件夹“wp-admin”,但也需要Apache生成404错误(未find)的所有,但没有选定的IP。 我发现这篇文章返回404代码未经授权的尝试,并尝试重写解决scheme,但不适用于我。

所以我把所有的网站保存在/ usr / local / www / apache22 / data中,并尝试在httpd.conf(Apache2.2 FreeBSD 9.1)中使用这样的configuration。

<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

好的,首先让我说,你的整个前提是有缺陷的:除了/wp-admin的存在以外,还有许多其他的方法来确定你使用的是WordPress。 你试图通过默默无闻的安全 ,因为你没有模糊你没有做一个特别优雅的工作。


抛开那些固有的问题,瞥一眼你的RewriteRule似乎是错误的。
根据Apache文档 :

什么是匹配?

在VirtualHost上下文中,模式最初将与主机名和端口之后以及查询string(例如“/app1/index.html”)之前的URL部分相匹配。

在目录和htaccess上下文中,模式最初将与文件系统path相匹配,在删除导致服务器到当前RewriteRule的前缀(例如“app1 / index.html”或“index.html”,取决于指令的位置定义)。

简单地说,这意味着如果你想在Directory上下文中执行此操作(如^domain.com/wp-admin($|/) ),则需要在规则中使用更多的wp-adminpath。 简单/天真的解决办法是将您的正则expression式更改为^.*wp-admin($|/)并且匹配包含wp-admin 任何内容(这也是validation规则本身被parsing的一个好方法)。

如果你坚持追求这个“安全”的途径,虽然我build议在VirtualHost上下文(或/wp-admin/.htaccess文件)中进行此更改,而不是在整个服务器的Directory上下文中。 写起来更简单,更健壮。 (如果你服务器上的某个人不希望他们的wordpresspipe理页面被locking,那么你的当前解决scheme就会中断(可能有很多人不会 – 例如有dynamicIP的人)。在每个VirtualHost或一个.htaccess文件允许你保持某些网站“解锁”。)