如何在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
相关产品推荐
相关产品推荐

