Intereting Posts

Используя базовый путь в Laravel 5 (Lumen)

Я использую laravel в проекте. На моей локальной машине сервер, к которому я должен получить доступ, – это просто

laraveltest.dev . Когда я открываю этот URL-адрес, проект работает нормально и без проблем.

Однако, когда я загружаю это на тестовый сервер, где материал находится в субфоре, например: laraveltest.de/test2/ . Общая папка находится в laraveltest.de/test2/public/ , но при вызове laraveltest.de/test2/public приложение всегда возвращает ошибку 404.

Я думал, что это может быть из-за базового пути, поэтому я сделал следующее в bootstrap/app.php

 $app = new Laravel\Lumen\Application( realpath(__DIR__.'/../') . env('APP_BASE_PATH') ); 

где env('APP_BASE_PATH') является env('APP_BASE_PATH') .

Поэтому app->basePath() возвращает /var/www/laraveltest/test2/public . Однако, когда теперь открывается

laraveltest.de/test2/public Я всегда получаю ошибку 404, и я не знаю почему. Что я делаю не так?

Вам не нужно менять basePath , за исключением случаев, когда вы используете структуру пользовательских папок. Своего рода:

 bootstrap ├── app.php └── autoload.php config ├── app.php ├── auth.php ├── cache.php ├── compile.php [...] src └── Traviola ├── Application.php ├── Commands │  └── Command.php ├── Console │  ├── Commands [...] 

Итак, в вашем случае все, что вам нужно сделать, это:

  • Проверьте конфигурацию .htaccess. Предоставляет ли сервер файл .htaccess переопределять определенную конфигурацию пути?

  • Проверьте свой public/index.php файл. Измените эту строку:


 /* |--------------------- | Run The Application |--------------------- | | Once we have the application, we can handle the incoming request | through the kernel, and send the associated response back to | the client's browser allowing them to enjoy the creative | and wonderful application we have prepared for them. | */ $app->run(); // into something like this $app->run($app['request']); 

Надеюсь это поможет.

дополнительный

Если вам интересно, как Lumen не работает в подпапке. Вы можете увидеть строку Laravel\Lumen\Application::getPathInfo() 1359 . Чтобы Lumen работал в подпапке, измените этот метод, просто создайте класс, который расширяет Laravel\Lumen\Application .

 <?php namespace App; use Laravel\Lumen\Application as BaseApplication; class Application extends BaseApplication { /** * Get the current HTTP path info. * * @return string */ public function getPathInfo() { $query = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : ''; return '/'.ltrim( str_replace( '?'.$query, '', str_replace( rtrim( str_replace( last(explode('/', $_SERVER['PHP_SELF'])), '', $_SERVER['SCRIPT_NAME'] ), '/'), '', $_SERVER['REQUEST_URI'] ) ), '/'); } } 

Затем, в вашем bootstrap/app.php , измените это:

 /* |------------------------ | Create The Application |------------------------ | | Here we will load the environment and create the application instance | that serves as the central piece of this framework. We'll use this | application as an "IoC" container and router for this framework. | */ $app = new App\Application( realpath(__DIR__.'/../') ); 

После этого вам не нужно изменять файл public/index.php , просто позвольте ему по умолчанию:

 /* |--------------------- | Run The Application |--------------------- | | Once we have the application, we can handle the incoming request | through the kernel, and send the associated response back to | the client's browser allowing them to enjoy the creative | and wonderful application we have prepared for them. | */ $app->run(); 

с Lumen 5.4 / apache / FPM / FastCGI:

Структура папок:

 /api ├── index.php ├── .htaccess /lumen-api/ ├── app ├── bootstrap .. 

Веб-корень: / URL: http://www.domain.dev/api

копировать файлы из каталога /lumen-api/public в /api

change /api/index.php :

1) адаптировать путь к каталогу с просветом просвета

 $app = require __DIR__.'/../lumen-api/bootstrap/app.php'; 

2) исправить неправильный baseURL добавить это после «$ app = require __DIR _….», чтобы исправить неправильный baseURL /vendor/symfony/http-foundation/Request.php:protected function prepareBaseUrl ()

 $_SERVER['SCRIPT_NAME']='index.php'; 

3) образец /lumen-api/routes/web.php :

 $app->get('/api/', ['as' => 'home',function () use ($app) { return $app->version() . " - " . route('home'); }]); 

4) Тест http://www.domain.dev/api Результат должен быть:

 Lumen (5.4.0) (Laravel Components 5.4.*) - http://www.domain.dev/api 

если вы получаете http://www.domain.dev/api/api два раза /api/api – исправление для baseURL из 2) не работает!