我知道这是一个非常流行的问题,但我还没有找到Laravel 5的有效解决方案。很长一段时间以来,我一直试图从Codeigniter迁移,但这个复杂的安装过程一直让我望而却步。

我不想运行一个虚拟机,这只是看起来尴尬时切换项目。

我不想将我的文档根文件夹设置为公共文件夹,这在项目之间切换时也很尴尬。

我已经尝试了.htaccess mod_rewrite方法

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

这只是给了我一个Laravel NotFoundHttpException在compiled.php行7610。

当我前段时间尝试L4时,我使用了将公共文件夹的内容移动到根目录的方法。L5的结构完全不同,遵循相同的步骤完全破坏了Laravel(服务器只会返回一个空白页面)。

在开发环境中是否有一种合适的方法来删除“public”:

与L5一起工作 允许我轻松地在项目之间切换(我通常同时工作2或3个项目)。

谢谢

**我使用MAMP和PHP 5.6.2


当前回答

可以在laravel5中删除公共url。遵循以下步骤:

步骤1。复制所有文件从公共和粘贴根目录

步骤2。打开index.php文件 替换为

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

to

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

and

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

to

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

并删除所有缓存和cookie。

其他回答

请将这些行添加到您的根.htaccess文件中,它隐藏了/public并重定向到所有没有public的url

RewriteEngine on
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]

4个最好的方法从URL删除公共。

如果您使用任何其他技巧从URL中删除公共,例如将server.php的名称更改为index.php,并更改为核心文件路径。显然,不要那样做。那为什么Laravel不给出这样的解呢因为这不是正确的方法。

1)在Laravel中使用htaccess从URL中删除公共

通过在根目录下添加一个。htaccess文件,你可以在没有public的情况下访问网站

<ifmodule mod_rewrite.c>
    <ifmodule mod_negotiation.c>
        Options -MultiViews
    </ifmodule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</ifmodule>

2)通过在本地创建虚拟主机来删除公共

我在这里演示的是windows操作系统。但我将尝试定义一个步骤,以便任何人都可以轻松地遵循该步骤。您还可以在谷歌上研究特定操作系统的相同内容。

步骤1:进入C:\Windows\system32\drivers\etc\以管理员模式打开“hosts”文件。

步骤2:添加以下代码。在这里,我给您演示projectname。本地域名演示,您可以指定任何您喜欢的。让每个地方都保持不变。

127.0.0.1  projectname.local

第三步:现在转到C:\xampp\apache\conf\extra,对于xampp用户和wamp用户,“C:\wamp\bin\apache\Apache2.4.4\conf\extra”,打开“httpd-vhosts.conf”文件。现在将以下代码添加到其中。

注意:根据您的项目更改文档根,并将域名添加到“hosts”文件中。

<VirtualHost projectname.local>
      ServerAdmin projectname.local
      DocumentRoot "C:/xampp/htdocs/projectdir"
      ServerName projectname.local
      ErrorLog "logs/projectname.local.log"
      CustomLog "logs/projectname.local.log" common
 </VirtualHost>

第四步:最后但重要的一步是重新启动Xampp或Wamp并访问http://projectname.local这样的url,您的Laravel将在没有公共url的情况下响应。


3)在Laravel运行命令移除公众

如果你在本地工作,那么你不需要做任何事情,只需要从你的终端或命令行工具运行以下命令。在此之后,您可以通过命令行提供的URL访问您的网站。

   > php artisan serve

如果你想在特定的IP上运行你的项目,那么你需要运行以下命令。如果你在局域网工作,那么如果你想允许其他人从本地访问你的网站,那么你只需要在得到你的IP地址后,使用命令行通过运行“ipconfig”检查你的IP地址。

> php artisan serve --host=192.168.0.177

如果您希望在特定IP和特定端口上运行项目,则需要执行以下命令。

> php artisan serve --host=192.168.0.177 --port=77

4)删除托管服务器或cpanel上的公共

项目完成后,您需要在服务器上托管项目,然后您只需要将域上的文档根目录设置为公共文件夹。查看下面的截图。

根据截图,如果你在public_html中没有任何项目文件夹,那么你只需要将你的文档根目录设置为“public_html/public”。

此处引用

我以前读过一些文章,它工作得很好,但真的不知道是否安全

    a. Create new folder local.
    b. Move all project into the local folder expect public folder.
    c. Move all the content of public folder to project root.
    d. Delete the blank public folder
    f. Edit the index file. 

编辑index.php

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

to

require __DIR__.'/local/bootstrap/autoload.php';
$app = require_once __DIR__.'/local/bootstrap/app.php';

1)我还没有找到L5中公共目录移动的工作方法。虽然可以修改bootstrap index.php中的一些内容,但似乎有几个辅助函数是基于公共目录存在的假设。总之,老实说,你真的不应该移动公共目录。

2)如果你使用MAMP,那么你应该为每个项目创建新的vhosts,每个服务于项目的公共目录。创建后,您可以通过定义的服务器名访问每个项目,如下所示:

http://project1.dev
http://project2.dev

对于拉拉维尔 5:

将Laravel根文件夹中的server.php重命名为index.php 从/public目录复制.htaccess文件到你的Laravel根目录 文件夹中。

就是这样!