
nginx下laravel抽离public文件夹,与项目文件夹同级,并重建索引
根目录文件结构
--HTML(根目录) --laravel --public --.env --composer.json --其他laravel文件
发现访问https://domain/laravel/public是可以显示根路由的的,其他的路由均返回404
解决办法
第一个问题,访问其他路由
跟着我的步骤来
一:将public文件夹移动到与laravel平级,且自己随便改个名字,在本文章改为app文件夹
# #进入你自己的laravel文件夹 # mv public/ ../app/
现在根目录文件结构更新为:
--HTML(根目录) --laravel --.env --composer.json --其他laravel文件 --app
二:要将HTML/app/index.php文件中引用文件更新
打开HTML/app/index.php
require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; //改为 require __DIR__.'/../laravel/bootstrap/autoload.php'; $app = require_once __DIR__.'/../laravel/bootstrap/app.php';
三:为了让网站上传的图片能顺利访问到,还要手动创建一个软连接。
# #进入你自己的laravel文件夹 # ln -s storage/app/public/ ../app/storage
四:修改nginx/conf/nginx.conf文件
进入自己nginx存放的位置,打开conf/nginx.conf文件 server{ #... #添加 location /app/{ try_files $uri $uri/ /safe/index.php?$query_string; } #... }
五:nginx -s reload 重启服务器
第二个问题,安全问题
laravel项目放在子文件夹,.env还有其他资源文件是可以直接访问下载到的,而如果是服务器根目录设置在laravel/public下的话,则是可以保护到我们的数据的。
直接访问https://domain/laravel/.env是可以下载到配置文件的,所以我们还需要将所有访问laravel文件下所有文件的请求拒绝
一:修改nginx/conf/nginx.conf文件
进入自己nginx存放的位置,打开conf/nginx.conf文件 server{ #... #添加 location /laravel/{ deny all; } #... }