在Plesk中访问CakePHP 2.x项目出现404错误的求助
解决CakePHP 2.6.13在Plesk中PHP/CTP页面404的问题
作为部署过不少CakePHP项目到Plesk的开发者,我来帮你一步步排查解决这个问题——静态页面正常但动态页面404,大概率是URL重写规则没生效或者Plesk的环境配置没适配CakePHP的结构。
第一步:确认Plesk中mod_rewrite已启用
CakePHP的路由完全依赖Apache的mod_rewrite模块,这是最常见的坑:
- 登录你的Plesk面板,找到对应域名的**“Apache & Nginx Settings”**(不同版本可能叫“Web Server Settings”)
- 在“Additional Apache directives”区域,检查有没有
RewriteEngine On,如果没有就添加进去;如果已经有,确认前面没有被#注释 - 保存设置后,重启Apache(Plesk面板里一般有重启按钮,也可以通过SSH执行
sudo service apache2 restart)
第二步:检查CakePHP的三个.htaccess文件是否正确
CakePHP 2.x需要三个.htaccess文件分别放在根目录、app目录、webroot目录,你可能只修改了其中一个?先把正确的内容贴出来,你对比替换:
1. 项目根目录的.htaccess
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule>
2. app目录下的.htaccess
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule>
3. app/webroot目录下的.htaccess(核心路由规则)
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
替换后记得检查文件权限:.htaccess设为644,目录权限设为755,避免服务器读不到这些规则。
第三步:确认Plesk的文档根目录指向正确
Plesk默认把域名的文档根目录设为httpdocs,但CakePHP的入口文件是app/webroot/index.php,所以需要调整:
- 进入Plesk的域名设置,找到**“Hosting Settings”**
- 在“Document root”选项里,把路径改成
httpdocs/app/webroot(假设你的CakePHP项目放在httpdocs目录下) - 保存设置后刷新页面测试
第四步:检查Plesk的“Friendly URLs”设置
有些Plesk版本的“Friendly URLs”开关会自动生成重写规则,可能和CakePHP的规则冲突:
- 在域名的“Apache & Nginx Settings”里,找到“Friendly URLs”选项,暂时关闭它,然后测试动态页面是否能访问
- 如果关闭后正常,说明是规则冲突,可以手动调整Plesk的自定义规则,或者保持关闭(CakePHP自己的路由已经足够友好)
第五步:测试直接访问index.php
如果上面的步骤都没解决,先测试直接访问http://你的域名/index.php:
- 如果能看到CakePHP默认页面或项目首页,说明是路由规则没生效,回到第二步重新检查
.htaccess内容和mod_rewrite状态 - 如果直接访问index.php也404,那可能是PHP环境没配置好,或者文件路径设置错误
最后提醒:修改完任何配置后,一定要清空浏览器缓存再测试,避免浏览器缓存旧的404响应。
内容的提问来源于stack exchange,提问作者Joel Mireles Campos
相关产品推荐
相关产品推荐

