如何将 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
我的机器上本地有一个 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