使用下面的 Apache/mod_rewrite 配置时,对于根目录 /var/www/ 上的任何 CGI 脚本,我都会收到 403 禁止错误,但是对于静态文件,我不会收到任何错误。
根目录之外的脚本,即 /var/www/random/script.cgi 可以正常运行,不会出现错误。
关闭 RewritedEngine 后,CGI 脚本即使在根目录 /var/www/ 中也能正常工作
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
Options SymLinksIfOwnerMatch
AllowOverride All
<IfModule mod_rewrite.c>
RewriteEngine on
</IfModule>
</Directory>
<Directory /var/www/>
Options +ExecCGI
Options SymLinksIfOwnerMatch
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AddHandler cgi-script .cgi
DirectoryIndex index.cgi
</Directory>
<Files "index.cgi">
SetHandler perl-script
PerlHandler ModPerl::PerlRunPrefork
Options ExecCGI
PerlSendHeader On
allow from all
</files>
答案1
尝试将正在运行的脚本复制到根目录,看看它是否有效,以防它与 conf 无关。使用 cp 的 -p 标志来保留执行权限等内容。例如:
cp -p /var/www/random/script.cgi /var/www/script.cgi