子域路由在Laravel 9和Inertia中不工作

gojuced7  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(135)

我正在进行一个Larave、Inertiajs和Vue项目,希望每个产品都能像https://{user:username}.example.test/{product:slug}这样的路线打开
因此,基本上我需要我的网站运行在example.test和任何产品显示在username.example.test/productSlug
我遇到了一个问题,即收到CORS错误,我在这里写了一个线程Laravel Inertia apps doesn't support subdomain redirects - No 'Access-Control-Allow-Origin'
不幸的是,我没有得到我需要的帮助,但经过几个小时的搜索,我发现了stackoverflow上的this,这帮助我终于成功地使重定向到正确的URL工程,但问题是,它并不真正工作.

解释如下:

控制器存储操作完成它应该做的事情,然后重定向到我的产品的工作页面没有cors错误,唯一的问题是,它显示在浏览器中的example.test/productSlug,而它应该是username.example.test/productSlug.当我刷新页面时,我在不正确的网址它让我的页面找不到错误,这是有意义的,因为实际正确的路线包含我想要的页面.
当我在firefox上跟踪请求时,我可以看到主机是正确的(用户名.示例.测试)但我到达的网址是'示例.测试',此外,当我被重定向到错误的路线,我可以看到我的产品和一切工作正常,但它'这不是一个工作的网址,因为当我刷新它给我的页面找不到,当我手动写入正确的网址username.example.test/productSlug它引导我到一个工作我产品的页面。
我希望你没搞混。
这是我的产品控制器@商店中的重定向行:

public function store(StoreProductRequest $request)
    {
        
        // Code
        
        return redirect()->route('products.show', [$user, $product]);
    }

我的路线如下所示:

Route::domain('{user:username}.' . env('APP_URL'))->group(function () {

    Route::get('{product:slug}', [ProductController::class, 'show'])->name('products.show');
    
});

这是我展示产品的方式:

public function show(User $user, Product $product)
    {
        return Inertia::render('Products/Show', [
            'user' => $user,
            'product' => $product,
            'thumbnails' => $product->productimages
        ]);
    }

我对cors.php做了以下修改:

'paths' => ['api/*', '*', 'sanctum/csrf-cookie'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => ['x-inertia'],

    'max_age' => 0,

    'supports_credentials' => false,
xwmevbvl

xwmevbvl1#

经过几天的研究,我现在确信,如果不刷新整个页面,从根域到子域的路由是不可能的。主机的任何更改都需要重新加载页面,这超出了Laravel和JetStream的范围,也超出了InertiaJS的控制范围。据我所知,这是出于安全目的。在这里查看更多https://github.com/inertiajs/inertia-laravel/issues/431

相关问题