我正在尝试使用这段代码在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]