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 个这样安排的不同项目,这使得部署新项目变得轻而易举。
这个问题似乎困扰着很多初次安装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 个这样安排的不同项目,这使得部署新项目变得轻而易举。