使用 httpd.conf 通过 IP 过滤管理员访问

Tri*_*tof 2 users

我正在尝试使用这段代码将所有后端 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)

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

vor*_*aq7 5

您遇到的问题是<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)