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

.htaccess中RewriteCond参数错误致500报错及子域名访问异常求助

解决CodeIgniter部署时.htaccess导致的500错误及子域名访问问题

错误原因定位

你遇到的500内部服务器错误,根源是.htaccess中这段无效的规则:

RewriteCond $1

RewriteCond语法要求必须包含条件表达式(比如比较、匹配逻辑),单独的$1没有任何有效判断逻辑,属于非法参数,直接触发Apache报错。

修正后的完整.htaccess配置

以下是兼顾CodeIgniter路由、HTTPS强制跳转、文件保护,同时解决子域名访问问题的配置:

# 启用URL重写引擎
RewriteEngine On
RewriteBase /

# 强制所有请求跳转至HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# CodeIgniter核心路由规则
# 跳过真实存在的文件/目录,避免干扰子域名或静态资源访问
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 排除无需转发的路径
RewriteCond $1 !^(index\.php|resources|robots\.txt)
# 将其余请求转发给CodeIgniter的index.php处理
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

# 禁止目录索引,防止泄露目录结构
Options All -Indexes

# 禁止访问ZIP/RAR压缩包文件
<FilesMatch "(?i)\.(zip|rar)$">
  Deny from all
</FilesMatch>

关键修正说明

  1. 移除无效规则:直接删除了导致500错误的RewriteCond $1及对应重复的RewriteRule,消除语法错误。
  2. 调整规则顺序:先执行HTTPS强制跳转,再处理CodeIgniter路由,逻辑更合理,避免跳转后重复触发路由规则。
  3. 保留子域名兼容逻辑:RewriteCond %{REQUEST_FILENAME} !-d会让指向真实子目录的子域名请求跳过CodeIgniter路由,直接访问对应目录,解决权限失败问题。

子域名访问额外排查点

如果子域名仍无法访问,可检查以下内容:

  • 确认cPanel中子域名的文档根目录设置正确(比如sub.example.com应指向public_html/sub)。
  • 检查子目录权限:目录权限设为755,文件权限设为644,确保Apache进程拥有读取权限。
  • 若子目录有独立的.htaccess,需确保其规则与主目录的配置无冲突。

内容的提问来源于stack exchange,提问作者Mohammad Kahfi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:37:33