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

通过.htaccess重写$_GET参数遇500错误求助

解决.htaccess重写URL导致500错误的问题

你的500错误大概率是因为HTTPS跳转规则不完整,再加上可能存在的重写冲突风险,咱们一步步来排查解决:

第一步:补全HTTPS跳转规则

你提供的HTTPS跳转规则没写完,这本身就会导致服务器解析失败,先把它补全:

RewriteEngine On
# 强制跳转至HTTPS
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

第二步:添加防冲突的URL重写规则

你的原重写逻辑没问题,但如果服务器上存在system实际目录,mod_dir的默认行为可能会和重写规则冲突,建议加上排除实际文件/目录的条件:

# 重写system/xxx到system.php?id=xxx
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^system/(.*)$ /system.php?id=$1 [NC,L]

这两个条件的作用:

  • %{REQUEST_FILENAME} !-f:跳过对实际存在文件的请求
  • %{REQUEST_FILENAME} !-d:跳过对实际存在目录的请求
    能有效避免不必要的重写循环或冲突。

第三步:确保Apache允许.htaccess生效

如果调整规则后还是报错,要检查Apache虚拟主机配置,确认/var/www/目录开启了AllowOverride All,否则.htaccess的规则不会被执行:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

修改后记得重启Apache服务:sudo systemctl restart apache2

第四步:完整的.htaccess示例

把以下内容放在/var/www/根目录的.htaccess里:

RewriteEngine On

# 强制HTTPS跳转
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# URL重写规则
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^system/(.*)$ /system.php?id=$1 [NC,L]

现在访问mydomain.com/system/748742就能正常映射到system.php?id=748742,同时会自动跳转到HTTPS。

如果你的system.php不在根目录(比如在子文件夹中),记得调整重写规则里的目标路径,比如文件在/var/www/public/system.php,规则要改成/public/system.php?id=$1。

内容的提问来源于stack exchange,提问作者Amazing man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:12