发布
社区首页 >问答首页 >带有文本选项的RewriteMap始终不返回任何结果

带有文本选项的RewriteMap始终不返回任何结果
EN

Stack Overflow用户
提问于 2017-05-19 06:18:57
回答 1查看 104关注 0票数 1

我将自己回答这个问题,因为我遇到了这个问题,并且找不到一个Google结果来帮助我,所以希望这可以节省一些未来的人一些时间。

在Apache2.2中,我有一个类似这样的RewriteMap,如果存在特定的查询字符串参数,它可以重定向到一个url:

代码语言:javascript
代码运行次数:0
复制
RewriteMap redirect "txt:/etc/arbitrary1/arbitrary2/redirect.txt"

RewriteCond %{QUERY_STRING} (^|&)foo=([^&]+) [NC]
RewriteCond ${redirect:%1} !^$
RewriteRule ^.*$ ${redirect:%1} [301,L]

/etc/arbitrary1/arbitrary2/redirect.txt

代码语言:javascript
代码运行次数:0
复制
foo http://hello.invalid/somepath/1  # 1
bar http://hello.invalid/somepath/2  # 2
baz http://hello.invalid/somepath/3  # 3

我遇到的问题是,无论我使用"foo,bar,baz“中的哪一个,${redirect:%1}指令都会返回空白(即”不匹配“)。这与redirect.txt的格式无关。关于我的发现,请看下面。

EN

回答 1

Stack Overflow用户

发布于 2017-05-19 06:18:57

所以问题最终是中间目录/etc/arbitrary1没有www-data用户的execute权限。花了这么长时间才发现的原因是,显然,来自root的suid是在检查文件是否存在之后执行的。也就是说,如果我将RewriteMap redirect "txt:/etc/arbitrary1/arbitrary2/redirect.txt"更改为RewriteMap redirect "txt:/etc/arbitrary1/arbitrary2/doesnotexist.txt",Apache将在重启时给出一个错误,这表明在加载配置时启动/etc/arbitrary1/arbitrary2/redirect.txt没有问题。因为Apache在启动时发现了它,所以我假设它也可以在执行期间访问它(事实证明,这是一个糟糕的假设)。当我给/etc/arbitrary1一个匹配www-data (使用chown www-data:www-data /etc/arbitrary1chmod o+x /etc/arbitrary1)的execute perm时,映射工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44058645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档