Laravel:从 url 中删除 public,同时保持项目独立

Laravel: Remove public from url while also keeping projects separate

这个问题似乎困扰着很多初次安装laravel的初学者(比如我自己)。我们不希望 url 中有 "localhost/public/",而是希望有一个干净的 url。这不是关于如何在 URL 中摆脱 "public" 的问题,因为这个问题已经有很多答案。

我的问题是"How can I remove the 'public' in the url while also keeping my laravel files in the same directory but also separate from my other projects in my public html/web root folder?"

当前wamp www目录文件结构

www
|-- mynewlaravelproject
|   |-- laravelfolders(non public folders and files)
|   |-- public
|       |-- index.php (Reached at localhost/public)
|       |-- .htaccess
|-- project1
|-- project2

有许多解决方案可用,但似乎几乎所有解决方案都有一些缺点。请随时纠正我以下任何问题,因为我问这个问题是因为 缺乏 理解。

1. 移动 index.php 和 .htaccess

将 index.php 和 .htaccess 从 public 移动到您的 laravel 项目根目录并一起删除 public 文件夹。 问题 是现在你被迫在 publicly 中包含所有 laravel 显示您网站的文件夹,这肯定会破坏安全性 分开它们的目的对吗?

    www
    |-- mynewlaravelproject
    |   |-- laravelfolders
    |   |-- index.php (Reached at localhost/)
    |   |-- .htaccess
    |-- project1
    |-- project2

2. 将项目文件移至别处,但在项目

中保留public 个文件

将 laravel 个文件移动到另一个非 public 文件夹。我将所有非 public 文件移动到另一个目录,将 public 文件留在项目文件夹中,然后在我的 index.php 中引用它们。 问题 是现在我必须在单独的目录中使用我的所有控制器和模型作为我的 public 文件,这很麻烦并且需要我打开两个文本编辑器.

    laravelfiles
    |-- laravelfolders (index.php is referencing bootstrap folder within)
    www
    |-- mynewlaravelproject
    |   |-- index.php (Reached at localhost/)
    |   |-- .htaccess
    |-- project1
    |-- project2

3. 将 laravel 个文件夹移动到项目之外

这背后的想法是,您的网站根目录中的项目文件夹将充当您的 public 文件夹,而您的 laravel 文件夹将位于父网站根目录中。这似乎是最合理的,但 问题 是现在我的 laravel 文件夹和文件混合在我的 wamp web 根目录中的所有其他项目中。在文本编辑器中管理文件和文件夹很麻烦。

    www
    |-- mynewlaravelproject(now acts as your public folder)
    |   |-- index.php (Reached at localhost/)
    |   |-- .htaccess
    |-- laravelfolders (This gets messy fast)
    |-- project1 (alongside this...)
    |-- project2 (...and this)

4. 修改您的 .htaccess 或使用虚拟服务器

问题是大多数人不建议尽可能修改您的 htaccess,并且制作虚拟服务器对于这样一个简单的任务来说似乎有点极端。我不喜欢这些选项,因为它们看起来像是解决这种看似简单的任务的变通方法,如果我对此完全错误,我也不会感到震惊。

所有这些都比使用 VirtualHost 更极端。这就是虚拟主机的用途!您有一台服务器,需要它为多个站点提供服务。因此,您使用 hosts 文件将多个域映射到服务器,然后根据域为每个站点显示不同的根文件夹。所以在你的主机文件中:

127.0.0.1        myproject.dev
127.0.0.1        myotherproject.dev

Apache 配置文件:

Listen *:80

NameVirtualHost *:80

<VirtualHost *:80>
ServerName myproject.dev
DocumentRoot "C:/wamp/www/myproject/public"
</VirtualHost> 
<VirtualHost *:80>
ServerName myotherproject.dev
DocumentRoot "C:/wamp/www/myotherproject/public"
</VirtualHost> 

重新启动 apache 和 bam!您有两个不同的 laravel 项目,每个项目都有自己的域。我的服务器上有大约 10 个这样安排的不同项目,这使得部署新项目变得轻而易举。

来源:http://www.trailheadinteractive.com/creating_multiple_virtual_sites_a_single_apache_install_windows_xp