在域名子目录中安装 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 文件里的敏感数据。

参考链接

  1. https://laravel-news.com/subfolder-install
  2. http://www.opentechguides.com/how-to/artic...
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

其实不用那么麻烦吧。比如你开发的时候Laravel项目叫MyApp,这种虚拟主机空间上线的时候直接放到 /var/www/html/ewoifahndsonfkwaeroifnh/MyApp 目录下即可。中间一串ewoifahndsonfkwaeroifnh就随机输入/生成一串即可。然后编辑/var/www/html/index.php,内容是

<?php
include __DIR__.'/ewoifahndsonfkwaeroifnh/MyApp/public/index.php';

这样就成了。

6年前 评论

@Clarencep 我没有这样玩过,我最终实现的效果是要把项目放在域名子目录中的,这样访问到——http://site.com/forum

6年前 评论

@zhangbao 子目录一样的。只要子目录下的index.php中包含了你的项目下的public/index.php即可。
我的意思主要是:不用把项目放到上级目录 -- 放到一个随机名字的子目录里面别人一样找不到。当然能放到WebROOT外的目录里面肯定更安全。

6年前 评论

@Clarencep 这种方式可以,但还是有风险的,所以就像你说得,放在「放到WebROOT外的目录里面肯定更安全」;)

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!