我正在尝试使用这段代码将所有后端 url 过滤到 httpd.conf 文件中的一个 IP:
<Location /admin>
Order deny,allow
Deny from all
Allow from 100.x.xxx.xxx
</Location>
Run Code Online (Sandbox Code Playgroud)
这个很好用。但是我找不到对 /?q=admin 执行相同操作的方法。
<Location /?q=admin>
Order deny,allow
Deny from all
Allow from 100.x.xxx.xxx
</Location>
Run Code Online (Sandbox Code Playgroud)
我是否需要一些带有反斜杠的正则表达式来转义某些字符?
您遇到的问题是<Location>(和<LocationMatch>)指令不对查询字符串(在 之后的内容?)进行操作 - 请参阅此 SO 问题和Apache 文档。
您可以使用mod_rewrite一些创造力来完成同样的事情-在文档中甚至还有一个基于查询字符串的访问控制示例。
下面的内容应该接近你需要的东西。
# 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]
Run Code Online (Sandbox Code Playgroud)