繁体   English   中英

我可以在Apache2 mod_rewrite中使用来自MySQL查询的多个结果吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM