Я использую 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) не работает!