如何在 Laravel 中将公用文件夹设为 root?
Posted
技术标签:
【中文标题】如何在 Laravel 中将公用文件夹设为 root?【英文标题】:How to make public folder as root in Laravel? 【发布时间】:2017-04-07 00:03:19 【问题描述】:我使用 Laravel 框架。如您所知,它的目录如下所示:
要打开我网站的主页 (Route::get('/', 'HomeController@index');
),我需要打开目录的 /public
文件夹。换句话说,要查看我网站的第一页,这里是 URL:
http://example.com/public
无论如何,只有我的域名 (http://example.com/
) 不是我的根。如何将/public
文件夹设为root?
目前我找到了一种解决方法。我可以在根目录上创建一个index.php
并将重定向代码写入/public
文件夹。所以当用户输入http://example.com/
时,它会自动重定向到http://example.com/public
。但这仍然很丑陋。我不喜欢在 URL 中看到 /public
。有什么建议吗?
【问题讨论】:
Laravel 5 - Remove public from URL的可能重复 您的 FTP 上的目录结构是什么?domains/domain.com/public_html
之类的东西?
请分享更多详细信息 - 为什么不将文档根目录设置为该目录?
【参考方案1】:
对于Ubuntu 20.04
,对虚拟主机执行以下操作。同样在等待几分钟后,清除浏览器缓存并重新加载。
sudo mkdir /var/www/<your domain>/public
sudo chown -R $USER:$USER /var/www/<your domain>
sudo nano /etc/apache2/sites-available/<your domain>.conf
然后在文件中粘贴
<VirtualHost *:80>
ServerName <your domain>
ServerAlias www.<your domain>
ServerAdmin <your email address>
DocumentRoot /var/www/<your domain>/public
ErrorLog $APACHE_LOG_DIR/error.log
CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>
然后运行
sudo a2ensite <your domain>
sudo a2dissite 000-default
sudo systemctl reload apache2
nano /var/www/<your domain>/public/index.html
然后粘贴到文件中
<html>
<head>
<title><your domain></title>
</head>
<body>
<center>
<p>Site Under Maintenance</p>
</center>
</body>
</html>
【讨论】:
【参考方案2】:第 1 步:将您的 /public/index.php 和 /public/htaccess 文件作为 /index.php 放入您的根目录和 /htaccess 。 第 2 步:现在对 index.php 进行更改
require __DIR__.'/../bootstrap/autoload.php'; //OLD code
$app = require_once __DIR__.'/../bootstrap/app.php';
到
require __DIR__.'./bootstrap/autoload.php'; //NEW code
$app = require_once __DIR__.'./bootstrap/app.php';
【讨论】:
【参考方案3】:有很多方法可以做到这一点。
你只需要从public目录中剪切index.php
和.htaccess并粘贴到根目录中,将index.php
中的两行替换为
require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
最好的方法是.htaccess
。在 Laravel 安装的根目录下创建 .htaccess
文件。下面的代码将适用于此。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
您可以从这里阅读:WAY TO DO
【讨论】:
我应该把这两行写在根目录下的index.php
文件中吗?
@MartinAJ 你有没有从公共目录中剪切 index.php 和 .htaccess 并将其粘贴到 laravel 的根目录中?
啊...还没有,让我测试一下
粘贴根目录后编辑index.php,替换两行index.php,应该可以了。
我做到了,是的,它有效.. +1 .. 只是因为更改了主目录,我网站中的所有路径都已损坏:-(
【参考方案4】:
不要修改任何 Laravel 文件。使用网络服务器(Apache 或 nginx)指向Laravel project to public
directory。
对于 Apache,您可以使用以下指令:
DocumentRoot "/path_to_laravel_project/public"
<Directory "/path_to_laravel_project/public">
对于 nginx,你应该改变这一行:
root /path_to_laravel_project/public;
【讨论】:
我应该在根目录下的.htaccess
文件中写这两行(我使用Apache)吗?
@MartinAJ 通常你把它放在主配置文件或虚拟主机配置中。
好吧,根目录上有一个/config
文件夹。所以?我应该在其中创建任何文件吗?
无论如何我想这个解决方案是最好的,但老实说我无法实现它。我使用 cPanel 网络服务,我真的不知道我应该在哪里粘贴您的代码。
在我看来,这个答案是最好的。这将使您的文件保持在 /public 文件夹上方的安全。正如 Laravel 的意图一样。在将应用程序/网站转移到不允许您编辑虚拟主机的托管服务时,这可能会更加困难甚至不可能。因此,请确保您选择允许您编辑虚拟主机文件的托管服务提供商。或者自己托管:)以上是关于如何在 Laravel 中将公用文件夹设为 root?的主要内容,如果未能解决你的问题,请参考以下文章
避开 laravel 的公用文件夹,直接在 web 服务器中打开根目录