如何在共享主机部署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.comAPP_ENV改成productionAPP_DEBUG改成false(生产环境绝对不能开调试模式)- 数据库配置换成共享主机提供的
DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD
- 缓存配置和路由:如果共享主机有SSH终端,直接进去核心文件夹运行这两个命令:
如果没有SSH,就在本地先运行这两个命令,然后把php artisan config:cache php artisan route:cachelaravel-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:755laravel-app-core/storage:755public_html/build:755
文件权限一般设为644就行,具体可以参考主机服务商的提示,权限太高会有安全风险,太低会导致读写失败。
备注:内容来源于stack exchange,提问作者Ezenwa Hopekell
相关产品推荐
相关产品推荐

