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

如何在CodeIgniter 3中禁止直接访问所有PHP文件?

禁止直接访问CodeIgniter 3中的PHP文件,仅允许控制器路由访问

要实现仅通过CodeIgniter的控制器方法(如site.com/user/login)访问网站,禁止直接运行任何PHP文件(包括根目录下的test.php),可以通过Web服务器的重写规则来实现,以下是Apache和Nginx的具体配置方案:

Apache 配置(使用.htaccess)

在网站根目录创建或修改.htaccess文件,添加以下规则:

RewriteEngine On
RewriteBase /

# 让CodeIgniter处理所有非文件/目录的请求
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

# 拦截所有非index.php的PHP文件访问,返回403禁止
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule ^(.*)$ - [R=403,L]

规则说明

  • 前三条规则是CodeIgniter的默认路由规则,确保所有指向控制器的请求都转发到index.php处理。
  • 后三条规则会检测请求的是否为PHP文件,且不是CI的入口文件index.php,直接返回403禁止访问状态码。如果需要将这类请求重定向到网站首页,可将最后一行替换为:RewriteRule ^(.*)$ / [R=301,L]。

Nginx 配置

如果使用Nginx作为Web服务器,在站点的server配置块中添加以下规则:

# 让CodeIgniter处理路由请求
location / {
    try_files $uri $uri/ /index.php?$query_string;
}

# 禁止直接访问除index.php外的所有PHP文件
location ~* \.php$ {
    if ($request_uri !~ ^/index.php) {
        return 403;
    }
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 根据你的PHP版本和FPM配置调整路径
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

验证配置

配置完成后,直接访问site.com/test.php应该返回403禁止页面,而访问site.com/user/login这类控制器路由则能正常加载对应页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:22:43