网站后台404大概率是伪静态未配对:apache需启用mod_rewrite、allowoverride all且.htaccess正确保存;nginx需在server块中添加重写规则并指向public目录,同时配置path_info传递。

网站后台出现404,大概率不是程序坏了,而是伪静态没配对——尤其在 phpEnv、PHPStudy 这类本地独立环境中,Apache 或 Nginx 默认压根不处理 .htaccess,也不转发非物理路径的请求,/admin、/wp-admin、/index.php/admin 这类路径直接 404 是常态。
Apache 下 .htaccess 不生效的三个硬性前提
很多用户把写好的 .htaccess 放进根目录就以为完事了,但 Apache 根本不会读它,除非同时满足:
- 模块已启用:
LoadModule rewrite_module modules/mod_rewrite.so这行在httpd.conf中不能带# - 目录权限放开:对应网站根目录的
<directory></directory>块里必须有AllowOverride All和Require all granted - 文件名和编码正确:
.htaccess是完整文件名(Windows 资源管理器默认隐藏扩展名,建议用 VS Code 新建并选「UTF-8 无 BOM」保存)
漏掉任意一条,RewriteEngine On 都是摆设,后台链接点开就是 404。
Nginx 下 /admin 路径 404 的真实原因
PHPStudy 或 phpEnv 的 Nginx 默认配置里,location / 块通常只处理静态文件,没写任何重写逻辑。当你访问 /admin,Nginx 查不到这个目录或文件,直接返回 404,根本不会交给 PHP。
必须手动改 vhost 配置,在 server { } 内加这段:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
注意两点:
-
last不能换成break——换完后重写后的请求不再进入location ~ \.php$块,PHP 完全收不到请求 - 这条规则必须放在
location ~ \.php$块之前,否则会被跳过
ThinkPHP/Laravel 后台 404 的特殊陷阱
TP6/8 或 Laravel 的后台入口实际在 /public/index.php,但很多人照抄 TP5 规则,写成 rewrite ^(.*)$ /index.php?s=$1 last;,结果直接 404——因为 /index.php 根本不存在,真实路径是 /public/index.php。
正确做法分三步:
- 把 Nginx 的
root指向项目/public目录(例如root "D:/phpEnv/www/myapp/public";) - 重写规则改为
rewrite ^(.*)$ /index.php?s=$1 last;(此时/index.php就是public/index.php) - 在
location ~ \.php$块里补上fastcgi_param PATH_INFO $fastcgi_path_info;,否则 TP6/8 启动时报URL pathinfo not supported
最易被忽略的是 PATH_INFO 传递和 root 指向 public ——这两项缺一,框架连启动都失败,更别说后台页面了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











