gpt4 book ai didi

php - 在 Laravel 5 (Lumen) 中使用基本路径

转载 作者:可可西里 更新时间:2023-11-01 13:19:15 25 4
gpt4 key购买 nike

我在项目中使用 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') 是子文件夹。

所以 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();

关于php - 在 Laravel 5 (Lumen) 中使用基本路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30511703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com