我有一个旧的 Web 应用程序,需要根据 URL 设置访问控制。
只有两种可能性:允许所有人或允许我的域。
我相信我可以做类似的事情:
<Location /app/one-part>
Allow from all
</Location>
<Location /app/another-part>
Allow from .foo.tld
</Location>
<Location /app/yet-another-part>
Allow from .foo.tld
</Location>
....
问题是这个特定的应用程序有数百个/app/thinguie
URL,我不想像上面所示的那样对它们全部进行编码。
有没有办法做类似的事情
<Location from file dom.txt>
Allow from .foo.tld
</Location>
<Location from file all.txt>
Allow from All
</Location>
以及列出的两个文件/app/whatevers
?
提前致谢。
哦,顺便说一句,没有模式,因此没有正则表达式可以用来优雅地过滤。:(
答案1
apache 指令“Location”仅接受 URL 路径或 URL 作为参数,无法读取外部列表。我建议创建一个脚本来生成自定义 conf,您可以将其包含在 apache conf 中。
例子:
[sparx@E1]$ cat file-foo.txt
/my/local
/my/src
/my/local/src
[sparx@E1]$
现在创建一个简单的 bash 脚本来生成自定义配置。
#!/bin/bash
for x in `cat file-foo.txt`
do
echo "<Location $x>"
echo "Allow from .foo.tld"
echo "<\Location>"
done
现在执行脚本并将输出重定向到 my-foo.conf
[sparx@E1]$ ./apgen.sh > my-foo.conf
[sparx@E1]$ cat my-foo.conf
<Location /my/local>
Allow from .foo.tld
<\Location>
<Location /my/src>
Allow from .foo.tld
<\Location>
<Location /my/local/src>
Allow from .foo.tld
<\Location>
[sparx@E1]$
现在,conf 文件已生成。验证它并将其包含在主 apache conf 中。
Include "path/to/my-foo.conf"