使用httpd.conf过滤pipe理员通过IP进行访问

我正在尝试使用这段代码在httpd.conf文件中将所有后端url筛选到一个IP:

<Location /admin> Order deny,allow Deny from all Allow from 100.x.xxx.xxx </Location> 

这个工作正常。 但是我找不到用/?q = admin做同样的方法。

 <Location /?q=admin> Order deny,allow Deny from all Allow from 100.x.xxx.xxx </Location> 

我是否需要一些带有反斜杠的正则expression式来转义一些字符?

你遇到的问题是<Location> (和<LocationMatch> )指令不能对查询string(在?之后的东西)操作 – 见这个SO问题和Apache文档 。

你可以使用mod_rewrite和一些创造性来完成同样的事情 – 甚至还有一个基于查询string访问控制的例子 。

下面的东西应该接近你所需要的东西。

 # Applying for all query strings (admin|user) RewriteCond %{QUERY_STRING} ^q=.* RewriteCond %{REMOTE_ADDR} !0\.1\.2\.3 # Something is missing here (result: domain.com/page?q=admin) but it works because the link dies anyway on an error page RewriteRule ^(.*) /page [QSA,L,R=301]