httpd 2.4 mod_rewrite别名目录暴露至浏览器URL的503问题排查
问题根源与解决方案
让我来拆解一下你遇到的这个问题——核心原因其实出在RewriteRule里的**绝对路径前缀/**上,咱们一步步分析:
为什么会触发503错误?
当你请求myUrl.com/old/folder/alpha时:
- 你的
.htaccess放在/old/folder对应的文件系统目录(/home/my/new/folder/www)下,所以RewriteRule的匹配是相对于这个目录的——^(.+)$只会匹配到alpha,而不是完整的old/folder/alpha。 - 你写的
RewriteRule ^(.+)$ /$1.sh [L]会把请求重写到网站根目录下的/alpha.sh,而不是你Alias的/old/folder/alpha.sh。这个根路径对应的文件系统位置是Apache默认的文档根(比如/var/www/html/alpha.sh),完全不存在。 - 因为配置了
AddHandler cgi-script .sh,mod_cgid会尝试执行这个不存在的脚本,加上Alias规则和重写的冲突,最终导致服务器返回503错误,甚至错误地把文件系统路径暴露到了浏览器地址栏。
而你改成RewriteRule ^(.+)$ $1.html [L]能正常工作,正是因为这个规则用了相对路径,重写后的目标是当前目录下的alpha.html,路径完全正确。
修复方案
修改.htaccess里的RewriteRule,去掉开头的/,让目标路径相对于当前Alias目录:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.+)$ $1.sh [L]
这样,请求/old/folder/alpha会被正确重写到/old/folder/alpha.sh,也就是你实际存在的CGI脚本,就能像直接访问它一样正常执行了。
额外验证:你已经确保了脚本有可执行权限(chmod +x alpha.sh),直接访问脚本正常也证明了这一点,所以不需要调整权限配置。
内容的提问来源于stack exchange,提问作者art vanderlay
相关产品推荐
相关产品推荐

