Laravel 12伪静态核心是统一请求至public/index.php:Apache需确保public/.htaccess生效且含RewriteRule ^ index.php [L];Nginx必须root指向public目录并仅用try_files $uri $uri/ /index.php?$query_string;,禁用rewrite规则。

Laravel 12 的伪静态规则配置逻辑与 Laravel 10/11 一致,核心仍是**确保所有请求(除真实存在的静态文件外)统一交由 `public/index.php` 处理**。它不依赖 `.htaccess`(Apache)或 `rewrite`(Nginx),而是靠服务器层的“兜底转发”机制。重点不是框架升级了新写法,而是旧错误更易暴露——比如漏掉 `$query_string`、用错 `root` 路径、或权限/环境变量未同步。 以下分两种主流环境说明关键配置要点,直击本地(如 PHPStudy)和生产(如 Nginx)常见卡点:
Apache 环境:确认 .htaccess 生效且内容正确
确保 Apache 已启用 mod_rewrite 模块(PHPStudy 中默认开启,但需检查)。项目根目录下的 public/.htaccess 文件必须存在且内容为官方标准:
- 不要手动创建在项目根目录(即含 app/ 的那层),必须放在 public/ 目录内
- 内容应为(Laravel 12 官方推荐):
Options -MultiViews -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
注意:不要加任何重定向到 /public/ 的规则——PHPStudy 或宝塔等面板要求网站根目录直接设为 public/,否则会多一层路径导致 404。
Nginx 环境:只用 try_files,删掉所有 rewrite
Nginx 下伪静态失效,90% 是因为写了过时的 rewrite 规则,或 root 指向错误。Laravel 12 强烈建议使用以下最小可靠配置:
-
root 必须指向 public 目录绝对路径,例如:
root /www/wwwroot/myapp/public;(不是项目根目录) - 在
location / { ... }块中,仅保留这一行核心规则:
这条语句含义明确:先找真实文件 → 再找真实目录 → 都找不到就交给 index.php,且完整保留 URL 参数($query_string,不是 $args)。
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
务必删除配置中所有形如 rewrite ^/(.*)$ /index.php?s=$1 last; 的语句——它们在 Laravel 12 + PHP 8.3+ 下易引发 PATH_INFO 解析异常、CSRF token 失效或路由缓存错乱。
通用必查项:配置生效 ≠ 页面能打开
即使规则写对,以下三点没做,依然会 404 或 500:
-
APP_URL 必须与实际访问域名完全一致(含 http/https 和端口),例如访问
http://localhost:8080,则.env中写APP_URL=http://localhost:8080;若用 HTTPS,还需在AppServiceProvider@boot中调用URL::forceScheme('https') -
public 目录必须是 Web 服务器的 document root——PHPStudy 中,在网站设置里把「根目录」选到
your-project/public,不是项目文件夹本身 -
storage 和 bootstrap/cache 目录需 PHP 进程可写:执行
chmod -R u+rwX storage bootstrap/cache,Windows 下用 PHPStudy 可右键目录 →「属性」→ 开启写入权限
验证是否真正生效的小技巧
别只看首页能否显示。打开浏览器开发者工具 → Network 标签页,访问一个自定义路由(如 /test),查看响应头中的 X-Powered-By 和 Content-Type 是否正常;再检查 PHP 日志或 Nginx access log,确认请求最终命中的是 index.php,而不是返回 404 或直接列出目录。










