Laravel在phpEnv中部署需设根目录为public、启用伪静态(Apache配.htaccess+AllowOverride All,Nginx用try_files)、关闭调试并清缓存、验证SCRIPT_NAME为/index.php。

如果您在 phpEnv 环境中部署 Laravel 项目时遇到页面 404、路由无法匹配或 index.php 强制暴露等问题,则极大概率是伪静态未正确启用或网站根目录未指向 public 子目录。以下是针对 phpEnv 环境的多种可行部署与伪静态配置方法:
一、将网站根目录设为 Laravel 的 public 目录
phpEnv 默认以上传目录整体作为 Web 根目录,但 Laravel 要求所有 HTTP 请求必须经由 public/index.php 入口统一处理,否则 .env、app/、config/ 等敏感目录可能被直接访问,且路由系统完全失效。
1、打开 phpEnv 控制面板,进入「站点管理」→「站点设置」→「基本设置」
2、在「网站根目录」字段中,将路径修改为 Laravel 项目内 public 子目录的完整绝对路径,例如:/www/laravel-app/public
立即学习“PHP免费学习笔记(深入)”;
3、确认「运行目录」留空(phpEnv 不识别 /public 这类相对路径填写)
4、点击「保存」后,重启 Apache 或 Nginx 服务(视当前启用引擎而定),否则 $_SERVER['DOCUMENT_ROOT'] 仍指向旧路径
二、Apache 环境下启用 .htaccess 伪静态
phpEnv 的 Apache 模式依赖 .htaccess 文件实现重写,需确保 mod_rewrite 已启用且目录允许覆盖规则,否则所有路由请求将返回 404。
1、进入 phpEnv 的「Apache 设置」→「模块管理」,勾选 rewrite_module 并保存,随后重启 Apache
2、在项目 public 目录下创建或确认存在 .htaccess 文件,内容必须为 Laravel 官方标准规则:
3、编辑该文件,写入以下内容(不可增删空行或注释):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
4、返回「Apache 设置」→「虚拟主机」,找到对应站点配置段,在
5、重启 Apache 服务使配置生效
三、Nginx 环境下配置 try_files 伪静态规则
phpEnv 的 Nginx 模式不读取 .htaccess,必须直接修改虚拟主机配置文件;使用 rewrite 指令易引发重定向循环或参数丢失,唯一推荐方式是使用 try_files 指令兜底转发。
1、进入 phpEnv「Nginx 设置」→「虚拟主机」,点击对应站点右侧「编辑配置」
2、定位到 server 块内的 location / { ... } 区域,删除所有 existing rewrite 行
3、将 location / 块内容替换为:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
4、在 location ~ \.php$ 块中,确认 fastcgi_param SCRIPT_FILENAME 行使用 $realpath_root$fastcgi_script_name(非 $document_root),并确保已包含 include fastcgi_params;
5、添加安全防护规则,防止敏感文件泄露:
location ~ /\.(env|git|log|lock|yml|yaml)$ {
deny all;
}
6、保存配置并重启 Nginx 服务
四、强制关闭调试并清除缓存避免环境干扰
即使伪静态和根目录正确,若 Laravel 仍返回 Whoops 错误页或路由跳转异常,通常因本地开发环境残留配置未切换至生产模式,导致缓存未刷新或错误处理机制阻断正常流程。
1、通过 phpEnv 终端或命令行进入项目根目录,执行:cp .env.example .env
2、编辑 .env 文件,确保以下三行严格设置为:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-domain.com(与实际访问域名完全一致,无尾部斜杠)
3、依次执行以下命令(每条单独运行,确认无报错):
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
4、检查 storage/ 和 bootstrap/cache/ 目录权限:终端中运行 chown -R www:www storage bootstrap/cache,再执行 chmod -R u+rwX storage bootstrap/cache
五、验证伪静态是否真正生效
仅靠页面能否打开不足以判断伪静态成功;关键指标是 PHP 是否收到原始请求路径及完整查询参数,且 SCRIPT_NAME 必须为 /index.php。
1、在 routes/web.php 中临时添加测试路由:
Route::get('/test-rewrite', function () {
return response()->json([
'script_name' => $_SERVER['SCRIPT_NAME'] ?? 'missing',
'request_uri' => $_SERVER['REQUEST_URI'] ?? '',
'query_string' => $_SERVER['QUERY_STRING'] ?? ''
]);
});
2、浏览器访问 https://your-domain.com/test-rewrite?foo=bar
3、若返回 JSON 中 script_name 值为 "/index.php"、query_string 为 "foo=bar",且状态码为 200,则伪静态配置已正确生效
4、立即删除该测试路由,避免上线遗留



















