Php 如何将Laravel站点置于共享主机上,该主机在子目录中有多个其他站点?

Php 如何将Laravel站点置于共享主机上,该主机在子目录中有多个其他站点?,php,laravel,laravel-5,shared-hosting,Php,Laravel,Laravel 5,Shared Hosting,我有一个Laravel网站在我的机器上本地运行,但我想让它活下来。我已经支付了共享主机的费用,并且我有许多站点在它们自己的子目录中的共享主机上运行。例如,在共享主机中,我有: public_html/site1 public_html/site2 etc. 这些都是个人网站。所以我想把我的Laravel网站也放在那里: public_html/laravelsite 问题是,我显然不希望大多数文件实际上都可以公开访问。但是,如果我将它们分开,只将public站点文件放入public\u ht

我有一个Laravel网站在我的机器上本地运行,但我想让它活下来。我已经支付了共享主机的费用,并且我有许多站点在它们自己的子目录中的共享主机上运行。例如,在共享主机中,我有:

public_html/site1
public_html/site2
etc.
这些都是个人网站。所以我想把我的Laravel网站也放在那里:

public_html/laravelsite
问题是,我显然不希望大多数文件实际上都可以公开访问。但是,如果我将它们分开,只将
public
站点文件放入
public\u html/laravelsite
中,并将其余文件放入public\u 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/inde.php
。所以把公用文件夹放在你想要的地方,其余的(Laravel)放在你想要的地方。然后从
public/index.php
,尝试链接
bootstrap/autoload.php

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

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

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

变成

22. require __DIR__.'/../../laravel_folder/bootstrap/autoload.php';
35. $app = require_once __DIR__.'/../../laravel_folder/bootstrap/app.php';
还有其他方法可以做到这一点。只要找到一个适合你需要的

对于Elixir,“…您可以以./”开始任何文件路径。这指示Elixir从项目根开始,而不是使用默认的基本目录”。来源:。所以你必须这样做来改变来源

elixir(function(mix) {
    mix.sass('./app/assets/sass/app.scss');
});
您也可以这样做来更改目的地。
现在,如果您想最大限度地减少开发和产品之间的差异,请重新组织开发中的文件夹,使其具有类似的结构。

最明显的解决方案-只需告诉服务器不要提供来自
/public\u html/laravelsite
的文件即可

例如,如果您的共享主机使用apache,请在
/public\u html/laravelsite
中使用创建一个
.htaccess
文件

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

Allow from all

谢谢,这似乎已经奏效了,尽管我仍然收到了一个错误,因为我做了一个git克隆,忘记了node_模块和供应商没有保存到repo。一旦我把所有的文件都传送过来,并且可以确认它正在工作,我会选择这个作为正确的答案-谢谢!我仍然收到一个错误:“资产清单中未定义css/all.css文件。”我假设这与目录路径已更改有关,但我还无法找出如何修复它。我取出{{elixir('css/all.css')},清除缓存并直接放入链接。这似乎已经解决了。好吧,酷。那么你会接受这个答案吗?抱歉,我不是来回复你的评论的。至于资产,没有任何变化,因为一切都是从我前面说过的
public/index.php
开始的。因此,从
public
中,您仍然可以像在本地计算机上一样链接到您的资产。资产的问题是,Elixir的路径没有更改,因此Elixir的位置不正确。我正在四处寻找其他解决方案,这样我就不必修改Elixir配置(我宁愿在生产中修改尽可能少的东西,以尽量减少从我的开发盒中推出时出现的问题)。嗯,这很简单。感谢您的回复!我想我可能会选择另一个解决方案,但这个看起来也不错。