Laravel部署至public_html子目录(~username路径)时返回404的问题咨询
Laravel部署至public_html子目录(~username路径)时返回404的问题咨询
我之前在类似的大学服务器环境部署Laravel时也碰到过完全一样的问题,其实核心原因有两个:一是APP_URL的作用被你误解了,二是你的.htaccess缺少关键的重写基础路径配置,导致Laravel把~dramosac当成了路由的一部分。下面一步步帮你解决:
先理清楚问题根源
APP_URL这个配置主要是给Laravel用来生成外部链接(比如邮件验证链接、静态资源地址)的,它不会告诉Laravel要忽略请求路径里的子目录前缀。- 你当前的
.htaccess没有设置RewriteBase,Apache会把完整的请求路径(包括~dramosac)直接传给Laravel的public/index.php,所以Laravel会把~dramosac当作一个路由去匹配,自然就返回404了。
具体解决步骤
1. 修正.htaccess文件(最关键的一步)
在public_html目录下的.htaccess里添加RewriteBase /~dramosac/,这个配置会告诉Apache:当前目录对应的URL基础路径是/~dramosac/,它会自动把请求中这个前缀去掉后,再把剩下的路径传给Laravel处理。修改后的.htaccess内容如下:
RewriteEngine On # 新增这一行,指定当前目录的URL基础路径 RewriteBase /~dramosac/ RewriteRule ^$ public/index.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ public/index.php [L]
2. 配置Laravel的URL和资源路径
为了让Laravel生成正确的静态资源(CSS、JS、图片)和路由链接,需要在.env文件中补充ASSET_URL配置,同时确保APP_URL是正确的:
APP_URL=https://<university domain>/~dramosac ASSET_URL=https://<university domain>/~dramosac
3. 清理缓存并验证
完成上面两步后,先清除Laravel的配置缓存(避免旧配置生效):
# 登录SSH后,进入public_html目录执行 php artisan config:clear
然后就可以测试访问了:
- 访问
https://<university domain>/~dramosac应该能正常加载Laravel的根路由页面(比如默认的欢迎页) - 访问你定义的路由,比如
https://<university domain>/~dramosac/login,应该能正确跳转到对应的页面,而不是404
如果还是有问题,可以排查这几点:
- 确认大学服务器的Apache已经启用了
mod_rewrite模块(通常大学服务器都会开启,若没开需要联系管理员) - 检查
public目录的文件权限,确保Laravel能读取里面的静态资源 - 清除浏览器缓存,避免旧的
.htaccess规则被缓存
内容来源于stack exchange
相关产品推荐
相关产品推荐

