Laravel:从URL中删除公共,同时保持项目独立


Laravel: Remove public from url while also keeping projects separate

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

我的

问题是"我怎样才能删除 url 中的'公共',同时将我的 laravel 文件保留在同一目录中,但也与我的公共 html/web 根文件夹中的其他项目分开?

当前 wamp www 目录 文件结构

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

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

1. 移动索引.php 和 .htaccess

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

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

2. 将项目文件移动到其他位置,但将公共文件保留在项目中

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

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

3.将Laravel文件夹移动到项目外部

这背后的想法是,Web 根目录中的项目文件夹将充当公共文件夹,而 laravel 文件夹将位于父 Web 根目录中。这似乎是最合理的,但问题是现在我的 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,并且对于如此简单的任务而言,制作虚拟服务器似乎有点极端。我不喜欢这些选项,因为它们似乎是这样一个看似简单的任务的解决方法,如果我对此完全错误,我不会感到震惊。

所有这些

事情都比使用虚拟主机更极端。这就是虚拟主机的用途!您有一台服务器,您需要它从中为多个站点提供服务。 因此,您可以使用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> 

重新启动阿帕奇和砰!您有两个不同的 laravel 项目,每个项目都有自己的域。 我的服务器上有 ~10 个左右不同的项目,这样安排,部署新项目变得很困难。

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