群晖DS718+(DSM6.1.7)部署Laravel5.6遇404错误求助
我之前帮朋友在群晖上部署过Laravel,你遇到的问题其实很常见——官方客服说不支持只是保守答复,社区里大把成功案例,核心问题大概率是URL重写规则没配置对或者权限/路径设置有误,咱们一步步排查:
先确认虚拟主机根目录是否正确
Laravel的入口文件是public/index.php,所以你的虚拟主机预设路径必须直接指向web/app/public,而不是web/app。虽然你说已经设置了这个路径,但建议再核对一遍:有没有拼写错误?文件夹是否确实存在?群晖的文件系统虽然大小写不敏感,但最好保持路径和实际文件夹名称完全一致。配置Apache的URL重写规则(关键!)
Laravel依赖mod_rewrite实现伪静态,把所有请求导向入口文件,你需要做两件事:- 开启Apache的
mod_rewrite模块:打开Web Station,找到Apache 2.4的设置,进入「模块」选项卡,找到mod_rewrite并勾选启用,保存后重启Apache。 - 修复
public文件夹下的.htaccess:如果Laravel的public文件夹里没有这个文件,新建一个;如果有,替换成下面的内容:
另外要给<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>.htaccess设置正确的权限:通过File Station右键文件,把权限设为644,所属用户组改成http(群晖Web服务器的运行用户),确保服务器能读取这个文件。
- 开启Apache的
检查Laravel所需的PHP扩展
你说勾选了所有扩展,但还是要确认几个Laravel 5.6的必备扩展是否真的启用:OpenSSL、PDO、Mbstring、Tokenizer、XML,还有连接MariaDB需要的PDO_MySQL。可以通过phpinfo页面搜索这些扩展名称,确认它们的状态是「enabled」。修复Laravel的文件夹权限
群晖的权限管控很严,Laravel的storage和bootstrap/cache文件夹需要写入权限才能正常运行:- 在File Station找到
web/app/storage和web/app/bootstrap/cache。 - 右键文件夹→「属性」→「权限」,添加用户
http,给它「读写」权限,记得勾选「应用到所有子文件和文件夹」,保存设置。
- 在File Station找到
如果尝试Nginx的话
之前你试过Nginx没成功,可能是没加重写规则。在Web Station的Nginx虚拟主机设置里,找到「自定义配置」,添加这段代码:location / { try_files $uri $uri/ /index.php?$query_string; }保存后重启Nginx再测试。
按照上面的步骤调整后,应该就能正常访问Laravel了——我之前帮朋友部署的时候,就是靠调整.htaccess和权限解决的404问题。
内容的提问来源于stack exchange,提问作者BillCode

