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

如何在Hostinger上实现根URL访问React SPA、/admin路由(如/admin/login)访问Laravel Blade模板?

如何在Hostinger上实现根URL访问React SPA、/admin路由(如/admin/login)访问Laravel Blade模板?

嘿,我之前帮朋友在Hostinger上部署过这种混合React+Laravel的项目,刚好就是根路径走SPA,/admin开头走Blade模板的需求,亲测可行,咱们一步步来搞定:

一、先理清楚项目结构

首先你得把React项目打包好,把build文件夹里的所有文件(index.html、static文件夹这些)放到Laravel项目的public/spa目录下(没有spa文件夹就新建一个)。这样Laravel的public目录既保留了自己的index.php入口,又能存放React的静态文件,互不干扰。

二、配置Laravel的路由

打开Laravel项目里的routes/web.php,先把所有/admin开头的路由定义好,剩下的请求都转发到React的入口:

// 所有admin相关的路由都放这个分组里,直接返回对应的Blade模板
Route::prefix('admin')->group(function () {
    // 比如你的登录页路由
    Route::get('login', function () {
        return view('admin.login');
    });
    // 其他admin路由,比如后台首页、用户管理之类的,都在这里定义
    Route::get('dashboard', function () {
        return view('admin.dashboard');
    });
});

// 除了/admin开头的所有请求,都返回React SPA的入口文件
Route::get('/{any}', function () {
    return file_get_contents(public_path('spa/index.html'));
})->where('any', '^(?!admin).*$');

这里的正则^(?!admin).*$是用来排除所有以admin开头的路径,确保这些请求不会被React接管,乖乖交给Laravel处理。

三、修改Hostinger上的服务器配置(.htaccess)

Hostinger用的是Apache服务器,咱们得修改Laravel项目public目录下的.htaccess文件,让服务器能正确分发请求:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # 处理/admin开头的请求,直接交给Laravel的index.php入口
    RewriteRule ^admin/(.*)$ index.php [L]

    # 非admin的请求,如果不是存在的文件/文件夹,就返回React的index.html(支持SPA的前端路由跳转)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(?!admin).*$ spa/index.html [L]
</IfModule>

这个配置的作用很明确:

  • 所有/admin/xxx的请求,都转发给Laravel处理,返回对应的Blade模板
  • 其他请求如果是访问不存在的文件/文件夹(也就是React SPA的前端路由),都返回React的入口,保证SPA的页面跳转正常工作

四、Hostinger上的部署与收尾

  • 把整个Laravel项目(包含public/spa里的React静态文件)上传到Hostinger的网站根目录(一般是public_html)
  • 登录Hostinger控制面板,进入「Hosting」->「管理」->「域名」->「高级设置」->「文档根目录」,选择Laravel项目的public文件夹(这一步超级重要,不然服务器找不到正确的入口文件)
  • 打开Hostinger的在线终端(控制面板「高级」->「终端」),执行php artisan route:clear清除路由缓存,避免新配置的路由不生效
  • 最后测试一下:访问你的根域名,应该能看到React SPA;访问你的域名/admin/login,应该能看到Laravel的Blade登录页面

一些我踩过的坑要提醒你

  • 打包React的时候,要确保package.json里的homepage设置为空或者"/",不然静态资源路径会出错,导致React页面加载不出样式和JS
  • 如果Hostinger的Apache没开mod_rewrite,直接联系客服开就行,一般默认是开着的,但保险起见可以检查一下
  • 要是Laravel的Blade模板加载不出来,先检查路由有没有定义对,还有视图文件是不是在resources/views/admin目录下(比如login.blade.php必须存在)

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:00:28