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

如何在共享主机部署Laravel+ReactJS(TypeScript+Inertia)应用

如何在共享主机部署Laravel+ReactJS(TypeScript+Inertia)应用

看起来你已经迈出了部署的关键几步——跑了npm run build,还尝试配置了.htaccess,我来帮你把整个部署流程补全,确保你的Laravel+React+TypeScript+Inertia应用在共享主机上稳稳运行:

1. 先把文件放对位置

共享主机的规则一般是公开可访问的内容必须放在public_html目录,别直接把整个Laravel项目丢进去,要拆分上传:

  • 把Laravel项目里public文件夹下的所有内容(包括你build好的build静态文件夹、index.php、.htaccess这些)直接上传到主机的public_html目录
  • 把Laravel的核心文件(app、config、routes、vendor、storage这些)上传到public_html外面的上级目录,比如新建个laravel-app-core文件夹放进去,这样核心代码不会被公开访问,更安全

2. 补全并修正.htaccess配置

你之前写的.htaccess内容不完整,我给你调整成适配共享主机的完整配置,直接替换public_html里的.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # 强制所有访问跳转到HTTPS,避免不安全的HTTP请求
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

    # 处理路由重写,把所有非文件/非目录的请求转发到index.php
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.php [L]
</IfModule>

3. 调整index.php的路径引用

因为我们把Laravel核心文件挪到了public_html外面,所以得修改public_html/index.php里的文件引用路径,找到这两行:

$app = require_once __DIR__.'/../bootstrap/app.php';
require_once __DIR__.'/../vendor/autoload.php';

把../改成你刚才新建的核心文件夹的相对路径,比如核心文件夹叫laravel-app-core,就改成:

$app = require_once __DIR__.'/../laravel-app-core/bootstrap/app.php';
require_once __DIR__.'/../laravel-app-core/vendor/autoload.php';

4. 配置环境变量并缓存

  • 把本地的.env文件复制到核心文件夹(比如laravel-app-core/.env),然后修改关键配置:
    • APP_URL改成你的域名,比如https://your-awesome-app.com
    • APP_ENV改成production
    • APP_DEBUG改成false(生产环境绝对不能开调试模式)
    • 数据库配置换成共享主机提供的DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD
  • 缓存配置和路由:如果共享主机有SSH终端,直接进去核心文件夹运行这两个命令:
    php artisan config:cache
    php artisan route:cache
    
    如果没有SSH,就在本地先运行这两个命令,然后把laravel-app-core/bootstrap/cache文件夹里的缓存文件上传到主机对应的目录就行

5. 确认Inertia和TypeScript的静态文件没问题

你已经运行了npm run build,这步很对!要确保public_html/build目录完整上传,里面的manifest.json和静态资源不能缺。另外检查下resources/js/app.tsx里的Inertia初始化代码,确保没有硬编码的本地地址,比如:

import { createInertiaApp } from '@inertiajs/react';
import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers';
import ReactDOM from 'react-dom/client';

createInertiaApp({
    title: (title) => `${title} - Your App`,
    resolve: (name) => resolvePageComponent(`./Pages/${name}.tsx`, import.meta.glob('./Pages/**/*.tsx')),
    setup({ el, App, props }) {
        ReactDOM.createRoot(el).render(<App {...props} />);
    },
});

这段代码不用改路径,因为build后的静态文件已经在正确的位置了。

6. 调整文件夹权限

共享主机上这步很容易踩坑,给以下文件夹设置权限:

  • laravel-app-core/bootstrap/cache:755
  • laravel-app-core/storage:755
  • public_html/build:755
    文件权限一般设为644就行,具体可以参考主机服务商的提示,权限太高会有安全风险,太低会导致读写失败。

备注:内容来源于stack exchange,提问作者Ezenwa Hopekell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:03:08