![从符号链接目录执行 cgi 脚本](https://linux22.com/image/559712/%E4%BB%8E%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E7%9B%AE%E5%BD%95%E6%89%A7%E8%A1%8C%20cgi%20%E8%84%9A%E6%9C%AC.png)
我有一个可通过 Apache 获得的脚本,它可以修改父目录。例如,mybin/a.pl,它可以修改 ../data/ 目录。我想创建各种别名,例如 localhost/www/mybin/a.pl localhost/zzz/mybin/a.pl,它可以修改不同的目录 - 例如 www/data 和 zzz/data。我想保留一个版本的 mybin。我尝试创建指向单个目录 (main/mybin) 的符号链接 www/mybin 和 zzz/mybin。问题是 apache 解析符号链接并执行 main/mybin 中的脚本,而不管路径如何。是否可以配置 apache 以便从符号链接中调用我的脚本?
答案1
我认为答案不会在 Apache 中找到,而是在 CGI 本身中找到。如果所有者相同,Apache 将遵循符号链接,也就是说,我会查看您尚未提供的 CGI 脚本。
我猜您在引用脚本修改的数据目录时使用的是相对路径。如果您要使用带有符号链接的脚本,那么这不是理想的情况,也是不明智的,因为相对路径将始终相同,因为它将从文件本身而不是符号链接位置执行。
当我尝试执行此类操作时,我通常会使用SCRIPT_FILENAME
Apache 传递的 CGI 环境变量。该变量应包含被调用的路径,该路径将是符号链接位置。该路径将是来自 / 的绝对路径。该变量将包含 CGI 脚本名称,因此您可以删除该名称,然后../data
从路径信息中附加或获取基本目录名称以确定正确的数据目录。
答案2
您可以让 Apache 不遵循Options -FollowSymLinks
您想要的目录中的符号链接。