如何将 Laravel 站点放在子目录中有多个其他站点的共享主机上?

How put Laravel site on shared hosting which has multiple other sites in subdirectories?

我的机器上本地有一个 Laravel 站点 运行,但我想让它上线。我已经为共享主机付费,并且我在共享主机上的子目录中有许多站点 运行。例如,在共享主机中,我有:

public_html/site1
public_html/site2
etc.

这些都是个人网站。所以我也想把我的 Laravel 网站放在那里:

public_html/laravelsite

问题是我显然不希望大多数文件实际上是公开访问的。如果我将它们分开,只是将 public 站点文件放入 public_html/laravelsite 并将其余文件放在 public_html 上方的文件夹中,则无法找到任何其他内容,并且网站将无法运作。

我可以使用其他解决方法来保护我的文件吗?

尝试打开AppServiceProvider.php修改如下:

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider {

    public function register()
    {
        $this->app->bind('path.public', function() {
            return base_path().'/public_html/laravelsite';
        });
    }
}

并将public文件夹的内容放到laravelsite文件夹中。

当用户请求您的站点时,起点始终是 public/inde.php。因此,将 public 文件夹放在您想要的位置,将其余文件夹 (Laravel) 放在您想要的位置。然后从public/index.php,尝试link bootstrap/autoload.php.

例如,在您的情况下,您可以转到 public/index.php 并更改第 22 行和第 36 行,这样他们仍然可以像这样找到 autload.php 文件:

22. require __DIR__.'/../bootstrap/autoload.php'; 

变成

22. require __DIR__.'/../../laravel_folder/bootstrap/autoload.php';

36. $app = require_once __DIR__.'/../bootstrap/app.php'; 

变成

35. $app = require_once __DIR__.'/../../laravel_folder/bootstrap/app.php';

还有其他方法可以做到这一点。只需找到适合您需求的一款即可。

对于 Elixir,“...您可以以 ./ 开始任何文件路径。这会指示 Elixir 从项目根目录开始,而不是使用默认的基本目录”。资料来源:https://laravel.com/docs/5.3/elixir。所以你做了这样的事情来改变来源

elixir(function(mix) {
    mix.sass('./app/assets/sass/app.scss');
});

您可以用同样的方法更改目的地。 现在,如果您想尽量减少 dev 和 prod 之间的差异,请重新组织 dev 中的文件夹以具有类似的结构。

最明显的解决方案 - 只需告诉您的服务器不要提供来自 /public_html/laravelsite?

的文件

例如,如果您的共享主机使用的是 Apache,请使用

/public_html/laravelsite 中创建一个 .htaccess 文件
Deny from all

然后转到 public 目录中 laravel 的 .htaccess 文件并添加

Allow from all