[英]Can I use multiple results from MySQL query in Apache2 mod_rewrite?
我正在尝试使用Apache2 mod_rewrite控制访问。 具体来说,我只想允许某些IP访问我的网站。
我了解我可以使用以下文件
RewriteMap hosts-allow "txt:/path/to/hosts.txt"
而且我已经读到我也可以使用SQL查询,但是显然它只对一个结果有效,如果返回了多行,那么它将使用一个随机的结果。 有几种使用多个结果的方法吗?
否则,我是否必须自动从MySQL保存IP以便由我自己全部归档才能使用多个结果?
如果是,那么Apache2是否会在文件更改时自动刷新文件的缓存?
任何见解都非常欢迎,谢谢:)
我知道了。
如果您有类似的问题,那么Apache2文件000-default.conf(在Linux发行版上查找此文件的位置)必须看起来像这样。
<VirtualHost *:80>
DBDriver mysql
DBDParams "host=localhost,user=root,pass=password,dbname=name"
RewriteMap whitelist "dbd:SELECT ip FROM users WHERE ip = %h LIMIT 1"
<Directory /var/www>
RewriteEngine On
RewriteCond "${whitelist:%{REMOTE_ADDR}|FOUND}" "FOUND"
RewriteRule "^" "" [F]
</Directory>
...
</VirtualHost>
现在来解释一下
RewriteMap whitelist "dbd:SELECT ip FROM users WHERE ip = %h"
这里的参数%h代表请求的IP地址,因此它不使用SQL查询的多个结果,但是由于WHERE仅在满足条件时才返回行,因此它可以适用于任意数量的IP。
RewriteCond "${whitelist:%{REMOTE_ADDR}|FOUND}" "FOUND"
:%{REMOTE_ADDR}在白名单中搜索REMOTE_ADDR,仅当通过SQL查询找到该IP地址时,它很可能包含IP地址,否则为空。
RewriteRule "^" "" [F]
此处[F]表示禁止,您可以将其设置为例如[R]进行重定向,但是您必须查找有关如何使用它的更多信息,而“ ^”表示此规则将应用于所有URL。
空的“”是Apache2在.txt映射中期望的关键分隔符(?),但是由于我们使用SQL查询,因此此处没有内容。
如果要在MySQL上使用mod_dbd,则必须安装一个软件包(例如在Debian 8上)
sudo apt-get install libaprutil1-dbd-mysql
否则将DBDriver设置为mysql后Apache2将无法启动
您还必须使用以下命令在Apache2中启用mod_rewrite和mod_dbd
a2enmod rewrite
a2enmod dbd
希望它对某人有所帮助:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.