将Laravel 5上传到服务器子文件夹

5
我正在尝试将Laravel 5项目上传到子文件夹中,如下所示:

public_html/project/

我已在index.php中进行了更改。
require __DIR__.'/../project/bootstrap/autoload.php';
$app = require_once __DIR__.'/../project/bootstrap/app.php';

在config/app.php文件中

'url' => 'http://example.com/project',

当我尝试使用以下URL: http://example.com/project/public,它被重定向到 http://example.com/public 请问如何将其上传到服务器?由于我已经尝试了很多选项,所以能否有人帮助我。

将您的项目根目录更改为public_html/project/public。您不需要更改其他任何内容。 - Jilson Thomas
4个回答

13

将整个 Laravel 项目上传到 public_html(公共)文件夹中并不是一个好主意。public 文件夹中的文件可以被任意访问。

如果你因为要上传到共享主机而被限制只能考虑将 Laravel 项目上传到 public_html 文件夹中,那么这并非必须。
可以尝试以下操作:
1. 在与 public_html 文件夹同级别创建一个名为 laravel(或其他你喜欢的名称)的文件夹。

Eg:  
/
 |--var  
    |---www
        |----laravel
        |----public_html  

2. 从您的 Laravel 项目中除了 public 文件夹之外,复制所有内容到服务器主机上的 laravel 文件夹中。
3. 打开您的 Laravel 项目的 public 文件夹,复制全部内容并粘贴到服务器主机上的 public_html 文件夹中。
4. 现在打开 public_html 文件夹中的 index.php 文件,并:

Change:  
require __DIR__.'/../bootstrap/autoload.php';  
To:  
requrie require __DIR__.'/../laravel/bootstrap/autoload.php';  
And  
Change: 
$app = require_once __DIR__.'/../bootstrap/app.php';  
To:  
$app = require_once __DIR__.'/../laravel/bootstrap/app.php';  
Save and close.  

5. 现在进入laravel文件夹并打开server.php文件。

Change:  
require_once __DIR__.'/public/index.php';  
To:  
require_once __DIR__.'../public_html/index.php'; 
Save and close. 

现在,当您访问使用服务器配置为域名的URL时,您的Laravel应用程序应该与在本地主机上运行的一样工作。

注意:config/app中的'url'=>'someurl'被Artisan即CLI使用,对您的Web服务器URL没有任何影响。
希望这有所帮助。

编辑
完成上述操作后,如果在尝试访问URL时出现空白页,则递归设置存储文件夹的写权限,即存储和其子文件夹中的所有文件夹都应将权限775设置为Web服务器所有者和组具有写权限。

如果您不打算在存储文件夹中存储任何敏感信息,也可以将权限设置为777以使所有人都具有存储文件夹的读、写和执行访问权限。

在Linux中要小心文件权限,它们就像双刃剑,如果使用不正确,可能会使您的应用程序易受攻击。要了解Linux文件权限,请阅读这里


谢谢。我按照你说的做了,但现在我得到了一个空白页面。我已经给了存储、供应商和引导>缓存读/写访问权限。会是什么错误呢? - K M Chaudhary
通常这是由于缺少对存储的写入权限所导致的。请确保存储文件夹中的每个文件夹及其所有子文件夹对 Web 服务器组或用户有写入权限。有时候人们很容易忘记递归设置写入权限,即存储文件夹本身具有写入权限,但其子文件夹却没有写入权限。请验证一下。还有,如果您使用开发工具,它是否显示任何错误? - Donkarnash
这对我很有用。但是我正在使用 Laravel 5.5.13,我没有意识到,但我必须设置 (1) PHP >= 7.0 && (2) 确保在数据库上给 MySQL 数据库用户权限 && (3) 确保手动进行 php 迁移(从本地导出并导入到远程)。幸运的是,我不需要设置 777 权限。 - Noitidart
我还需要在.env文件中更改DB_HOSTDB_DATABASEDB_USERNAMEDB_PASSWORD。然后从cPanel创建数据库,创建用户,重要的是将用户添加到具有我授予的“所有权限”的数据库中。 - Noitidart

1
完成上述步骤后,请检查以下几个文件夹的读写权限(即应为777):
storage、vendor 和 bootstrap>cache 检查 public_html 文件夹中是否有 .htaccess 文件,如果没有,请从 public 文件夹中复制。
最后,请检查 PHP 版本是否高于 5.5。
这对我起作用了。干杯!

0

问题已解决:-

前往laravelFolder/bootstrap/cache,然后将config.php重命名为config.php_old,重新加载您的网站。


-1

我是这样做的(我的版本是laravel 5.2)

  1. 将server.php文件的名称更改为“index.php”。
  2. 从public文件夹复制.htaccess文件到主目录(创建子文件夹)
  3. RewriteEngine On之后,我们必须添加RewriteBase /yoursubfolder/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接