在域名子目录中安装 Laravel 项目,要注意隐藏 .env 文件
一、为什么
如果你把 Laravel 项目放在一个域名子目录中,你可能就要这样访问了。
site.com/subfolder/public/
因为项目的入口文件是 public
下的 index.php
。但这有一个问题,设想有人访问了下面的路径:
site.com/subfolder/.env
你可能就懵逼了,你暴露了大量的敏感数据。所以如果是作为域名子目录存在的 Laravel 项目,务必要隐藏好 .env
文件。
二、怎么隐
原料:我有一台 Ubuntu 16.04 服务器,安装了 Apache 服务器,网站根目录位于 /var/www/html
;一个 Laravel 项目;一个域名 site.com
。
预期:我用地址 site.com/forum
访问到我的项目,而且不暴露 .env
文件。
第一步
将 Laravel 项目放在 /var/www/SalivaForum
目录下。
www
|
|-- SalivaForum
|-- app <DIR>
|-- bootstrap <DIR>
|-- config <DIR>
|-- database <DIR>
|-- **public** <DIR>
|-- resources <DIR>
|-- routes <DIR>
|-- storage <DIR>
|-- tests <DIR>
|-- vendor <DIR>
|-- .env
|-- .env.example
|-- .gitattributes
|-- .gitignore
|-- artisan
|-- composer.json
|-- composer.lock
|-- gulpfile.js
|-- package.json
|-- phpunit.xml
|-- readme.md
|-- server.php
第二步
将 public
重命名为 forum
,移动到 /var/www/html/forum
。
# mv /var/www/SalivaForum/public/ /var/www/SalivaForum/forum/
# mv /var/www/SalivaForum/forum/ /var/www/html/
第三步
这时,为了能正常启动 Laravel 应用,要修改 /var/www/html/forum/index.php
文件中的两处。
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
// 修改为
require __DIR__.'/../../SalivaForum/bootstrap/autoload.php';
$app = require_once __DIR__.'/../../SalivaForum/bootstrap/app.php';
第四步
为了让网站上传的图片能顺利访问到,还要手动创建一个软连接。
# ln -sr /var/www/SalivaForum/storage/app/public/ /var/www/html/forum/storage
这条命令表示在 forum
目录下创建一个软连接 storage
,它指向目录 storage/app/public
。
结束。
这时,你的项目既可以正常访问,也可以很好的隐藏 .env
文件里的敏感数据。
参考链接
本作品采用《CC 协议》,转载必须注明作者和本文链接
其实不用那么麻烦吧。比如你开发的时候Laravel项目叫
MyApp
,这种虚拟主机空间上线的时候直接放到/var/www/html/ewoifahndsonfkwaeroifnh/MyApp
目录下即可。中间一串ewoifahndsonfkwaeroifnh
就随机输入/生成一串即可。然后编辑/var/www/html/index.php
,内容是这样就成了。
@Clarencep 我没有这样玩过,我最终实现的效果是要把项目放在域名子目录中的,这样访问到——
http://site.com/forum
。@zhangbao 子目录一样的。只要子目录下的
index.php
中包含了你的项目下的public/index.php
即可。我的意思主要是:不用把项目放到上级目录 -- 放到一个随机名字的子目录里面别人一样找不到。当然能放到WebROOT外的目录里面肯定更安全。
@Clarencep 这种方式可以,但还是有风险的,所以就像你说得,放在「放到WebROOT外的目录里面肯定更安全」;)
学习了