You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:12:08