UnluckySerivelha
@UnluckySerivelha

Как разместить laravel в подпапке?

Допустим, есть домен my-laravel-app.ru
Нужно разместить сайт на laravel так, чтобы он был доступен по URL my-laravel-app.ru/laravel/
Структура папок:
public_html
    -- laravel
        ---- public
        ---- app
        ---- .htaccess
        ---- ...

В public_html/laravel/.htaccess указываю:
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>


В public_html/laravel/public/.htaccess указываю:
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On
    RewriteBase /laravel/

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

При обращении к my-laravel-app.ru/laravel/ получаю 404 ошибку от laravel (стилизованную, которую отдает именно laravel, а не веб-сервер). Будто бы laravel не может разобраться с роутами по какой-то причине.

При размещении всех файлов laravel в public_html сайт корректно открывается через my-laravel-app.ru
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
pickHabr
@pickHabr
Костыльных дел мастер
мне кажется тебе нужно не на уровне nginx это делать, а на уровне роутов ларавель. в ларавель есть роуты api, для этих маршрутов все идет черед префикс /api. нужно по аналогии реализовать /laravel (ну а все остальные варианты доступа убрать)

Например вот такой провайдер (ну или можно в стандартном провайдере, но я бы там закоментил просто стандартный вариант, а кастом в новый провайдер унес)
<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;

class MyRouteServiceProvider extends ServiceProvider
{
    /**
     * The path to your application's "home" route.
     *
     * Typically, users are redirected here after authentication.
     *
     * @var string
     */
    public const HOME = '/laravel/home';

    public function boot(): void
    {
        $this->routes(function () {
            Route::middleware('laravel')
                ->prefix('laravel')
                ->group(base_path('routes/laravel.php'));
        });
    }
}


и подключить его в config/app.php
'providers' => ServiceProvider::defaultProviders()->merge([
        /*
         * Application Service Providers...
         */

        App\Providers\MyRouteServiceProvider::class,
    ])->toArray(),
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы