在GoDaddy cPanel部署PHP站点遭遇404错误求助
问题分析与修复方案
环境信息
- 项目目录:
/public_html/xxx-domain.com - 核心文件:
.htaccess、server.php - PHP配置:
AddHandler application/x-httpd-ea-php74 .php .php7 .phtml - 错误提示:
Not Found
The requested URL was not found on this server.Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
问题排查与修复
1. 删除无效的文件/目录处理规则
原.htaccess中这段规则存在语法错误,会导致重写逻辑混乱:
RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ ^$1 [N]
原因:^$1是无效的目标路径,[N]标志会强制重写引擎循环处理,触发异常。
修复:直接删除这3行代码——Apache默认会直接访问存在的文件/目录,无需额外重写。
2. 优化静态文件转发规则(若需保留)
原规则未终止重写流程,可能与后续规则冲突:
RewriteCond %{REQUEST_URI} (\.\w+$) [NC] RewriteRule ^(.*)$ public/$1
修复:添加[L]标志终止重写,确保静态文件请求不会被后续规则干扰:
RewriteCond %{REQUEST_URI} (\.\w+$) [NC] RewriteRule ^(.*)$ public/$1 [L]
如果你的静态文件不在public/目录下,直接删除这段规则即可。
3. 完善Server.php转发规则
原规则未明确匹配路径且缺少终止标志,可能导致转发失效:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ server.php
修复:明确路径匹配并添加[L]标志:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ server.php [L]
修复后的完整.htaccess代码
Options -MultiViews RewriteEngine On # 强制HTTPS与WWW前缀 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 静态文件转发到public目录(无需则删除) RewriteCond %{REQUEST_URI} (\.\w+$) [NC] RewriteRule ^(.*)$ public/$1 [L] # 非文件/目录请求转发到server.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ server.php [L]
额外检查步骤
- 确认
server.php存在于项目根目录,文件权限设置为644。 - 若使用
public/目录,确认该目录存在且权限为755,静态文件确实存放其中。 - 联系主机商确认Apache已启用
mod_rewrite模块(大部分主机默认启用)。 - 清除浏览器缓存后重新测试,避免旧的301重写规则缓存影响结果。
内容的提问来源于stack exchange,提问作者Jamshaid Javaid
相关产品推荐
相关产品推荐

