php网站404主因是web服务器未正确转发请求至php,需确认三件事:根目录是否指向public、php模块是否启用并关联、重写规则是否生效;linux下还需检查大小写与权限。

PHP网站部署后出现404,绝大多数情况不是代码问题,而是Web服务器没把请求正确送到PHP处理环节。核心要确认三件事:文件路径对不对、PHP能不能执行、路由能不能兜底。
检查Web服务器根目录是否指向正确位置
404最常见原因是服务器配置的根目录(Apache的DocumentRoot或Nginx的root)没对准你放index.php的文件夹。
- Apache:打开虚拟主机配置,确认
DocumentRoot "/var/www/myapp/public"和<directory></directory>路径完全一致,且该目录下真实存在index.php - Nginx:检查
server块里的root指令,例如root /var/www/myapp/public;——注意末尾不加斜杠 - 框架如Laravel、ThinkPHP必须把
public子目录设为Web根目录,不能指向项目根目录(如/var/www/myapp) - 改完配置后务必重启服务:
systemctl restart apache2或systemctl restart nginx
确认PHP文件能被解析,而不是直接返回404或下载
如果访问index.php时浏览器下载文件、显示源码,或返回空响应,说明PHP模块根本没启用或没关联上。
- Apache:运行
a2enmod php(或php8.1等具体版本),确保AddType application/x-httpd-php .php已写入配置 - Nginx:检查
location ~ \.php$块是否存在,里面必须有fastcgi_pass(如unix:/var/run/php/php8.1-fpm.sock)和fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - 用命令验证PHP就绪:
php -v看版本,systemctl status php8.1-fpm看服务是否运行中
验证重写规则是否生效(尤其框架路由)
除index.php外的路径(如/login、/api/user)全部404,基本是URL重写没起作用。
- Apache:确认
mod_rewrite已启用,AllowOverride All在对应<directory></directory>里设置,且项目根目录下有有效的.htaccess文件 - Nginx:必须在
location /块中加入try_files $uri $uri/ /index.php?$query_string;(Laravel)或try_files $uri $uri/ /index.php?s=$uri&$args;(ThinkPHP) - 快速测试:在
index.php开头加<?php die('hit'); ?>,然后访问/test——如果输出“hit”,说明重写已生效;如果仍404,说明请求根本没进到index.php
排查大小写、权限与部署细节
Linux系统严格区分大小写,Windows则可能掩盖问题,上线后容易暴露。
- 检查URL路径与实际文件名是否完全一致:比如
User.php≠user.php,index.PHP≠index.php - 确认Web服务器用户(如www-data或nginx)对项目目录有读取权限:
chmod -R 755 /var/www/myapp,必要时chown -R www-data:www-data /var/www/myapp - 宝塔面板用户注意:进【网站】→【设置】→【网站目录】→【运行目录】,必须手动选
/public并保存重启 - 从Apache迁移到Nginx时,
.htaccess规则需手动转成Nginx语法,Nginx默认不识别.htaccess
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











