You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将内置VueJS的Laravel应用部署到生产服务器?

嘿,我来帮你搞定这个问题——其实你完全没必要把public目录里的文件移出来,这反而会给Vue的静态资源路径添乱!下面给你两种方案,优先推荐第一种官方标准做法:

方案一:服务器根目录指向public(推荐,无风险)

这是Laravel官方最推荐的部署方式,既能保证项目安全(避免暴露根目录下的.env等敏感文件),又能完美适配Vue的资源路径。

1. 先在本地编译Vue生产资源

部署前,一定要在本地运行编译命令,把Vue组件打包成生产环境可用的静态文件:

npm run build

这会把编译后的app.js、app.css等文件放到项目的public/js和public/css目录下,生产环境必须用这些编译后的文件,不能用开发时的热加载资源。

2. 配置服务器根目录

不管你用的是Apache、Nginx还是cPanel/Plesk这类面板,核心操作都是把网站的根目录设置为Laravel项目的public文件夹,而不是项目的根目录。

Apache配置示例

修改你的虚拟主机配置或者面板里的.htaccess设置:

<VirtualHost *:80>
    ServerName your-domain.com
    DocumentRoot /var/www/your-laravel-project/public

    <Directory /var/www/your-laravel-project/public>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted

        RewriteEngine On
        RewriteBase /
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.php [L]
    </Directory>
</VirtualHost>

Nginx配置示例

server {
    listen 80;
    server_name your-domain.com;
    root /var/www/your-laravel-project/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;
    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 替换成你的PHP-FPM路径
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

如果用cPanel这类面板,直接在域名管理里找到“根目录”设置,选择项目下的public文件夹即可,不用手动写配置。

方案二:强制移出public文件(不推荐,仅用于服务器受限场景)

如果你的服务器限制必须把入口文件放在根目录,那需要调整3个地方才能让Vue正常工作:

1. 修改根目录的index.php

把从public目录移出来的index.php里的路径修改,同时指定public路径:

// 原代码
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';

// 修改后
require __DIR__.'/vendor/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';

// 新增:告诉Laravel静态资源的根目录是当前目录
$app->bind('path.public', function() {
    return __DIR__;
});

2. 调整Vue的编译输出路径

打开项目根目录的webpack.mix.js,把输出路径里的public/前缀去掉,让编译后的资源输出到根目录:

// 原代码
mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css');

// 修改后
mix.js('resources/js/app.js', 'js')
   .sass('resources/sass/app.scss', 'css');

修改完后,重新运行npm run build,把编译后的资源生成到根目录的js和css文件夹。

3. 调整.htaccess规则

把移到根目录的.htaccess里的重写规则调整为:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

内容的提问来源于stack exchange,提问作者Jatin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:09:08