修复YOURLS的Apache/.htaccess配置引发的HTTP ERROR 500问题
问题:子目录YOURLS 500错误排查与修复(Plesk/Apache/Nginx+Cloudflare环境)
根目录部署WordPress(访问地址www.example.com),子目录y部署YOURLS短链接平台(访问地址example.com/y/)。此前在虚拟主机运行正常,切换到Plesk+Apache+Nginx的VPS并配置Cloudflare DNS和SSL后,WordPress正常,但YOURLS抛出HTTP ERROR 500,且/var/www/vhosts/system/example.com/logs/error_log无相关日志。访问https://example.com/y/时会加载手动放置的测试index.html,此前误以为是.htaccess规则未生效(该假设已被指出错误)。
现有配置
根目录WordPress的.htaccess
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
y目录YOURLS的.htaccess
# BEGIN YOURLS <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /y/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ /y/yourls-loader.php [L] </IfModule> # END YOURLS
Apache配置(/var/www/vhosts/system/example.com/conf/httpd.conf)
针对端口7080和7081的虚拟主机均包含以下目录配置:
<Directory /var/www/vhosts/example.com> Options -FollowSymLinks AllowOverride AuthConfig FileInfo Indexes Limit Options=Indexes,SymLinksIfOwnerMatch,MultiViews,ExecCGI,Includes,IncludesNOEXEC </Directory>
修复方案与调试方法
1. 强制输出PHP错误定位500根源
无日志的情况下,直接修改YOURLS的yourls-loader.php,在文件最开头添加以下代码强制显示错误:
<?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // 原有代码继续
访问https://example.com/y/,此时会直接显示具体错误(比如权限问题、配置文件语法错误、依赖缺失等),这是最快定位问题的方式。
2. 检查文件与目录权限
- 确保YOURLS目录下的
user/config.php权限为644,所有目录权限为755 - 确认
/var/www/vhosts/example.com/y/及其子目录、文件的所有者为Web服务器运行用户(Plesk环境通常是psacln,也可能是apache或nginx)
3. 验证Plesk的Nginx反向代理配置
因为是Nginx前端代理、Apache后端的架构,需确认请求正确转发:
- 登录Plesk控制面板,进入该域名的「主机设置」,确保「代理模式」为开启状态
- 检查自动生成的Nginx配置文件
/var/www/vhosts/system/example.com/conf/nginx.conf,确认没有拦截/y/路径的规则
4. 调整.htaccess规则优先级
根目录WordPress的重写规则可能干扰子目录,可通过两种方式处理:
- 在YOURLS的
.htaccess开头添加RewriteOptions inherit,确保子目录规则优先:# BEGIN YOURLS <IfModule mod_rewrite.c> RewriteOptions inherit RewriteEngine On RewriteBase /y/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ /y/yourls-loader.php [L] </IfModule> # END YOURLS - 或者在根目录WordPress的
.htaccess中排除/y/路径的重写,修改最后一条规则:RewriteCond %{REQUEST_URI} !^/y/ RewriteRule . /index.php [L]
5. 排查Cloudflare配置干扰
- 确认Cloudflare的「SSL/TLS」模式与VPS上的SSL证书匹配(推荐「严格」模式)
- 暂时关闭Cloudflare的「缓存」「火箭加载」功能,排除CDN规则干扰
- 检查Cloudflare的「页面规则」,确保没有针对
/y/路径的特殊拦截规则
6. 验证Apache模块加载
确保Apache已加载mod_rewrite模块,可执行命令检查:
apache2ctl -M | grep rewrite
若未加载,需启用模块并重启Apache。
内容的提问来源于stack exchange,提问作者Florin C.
相关产品推荐
相关产品推荐

