You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel:如何通过.htaccess移除URL中public并强制HTTPS?现有配置失效

解决Laravel移除public路径并强制HTTPS跳转的问题

我看到你现在的问题是根目录的.htaccess规则顺序导致HTTPS强制跳转没有生效——因为你先执行了转发到public的规则,并且用了[L]标志,这会让Apache直接停止处理后续的HTTPS跳转规则,所以永远不会触发HTTP到HTTPS的重定向。

下面是修正后的配置方案,保证两个需求同时生效:

根目录.htaccess 修改方案

把根目录的.htaccess替换成以下内容:

<IfModule mod_rewrite.c>
RewriteEngine on

# 第一步:强制HTTP跳转至HTTPS
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 第二步:将请求转发至public目录(隐藏public路径)
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L]
</IfModule>

关键调整说明:

  • 规则顺序调换:先处理HTTPS强制跳转,再转发到public目录。这样所有HTTP请求会先被重定向到HTTPS,再执行public路径的隐藏逻辑。
  • 修正REQUEST_URI匹配规则:把!^public改成!^/public/,避免匹配到类似public.html这类带public字符串的请求路径,匹配更精准。
  • 保留[L]标志:每个规则的[L]确保当前规则执行后停止后续处理,避免冲突。

public目录.htaccess 保持默认

你当前public目录下的Laravel默认.htaccess不需要修改,它负责处理Laravel的路由逻辑,和根目录的规则不会冲突。

测试注意事项

因为301重定向会被浏览器永久缓存,测试前请:

  • 清除浏览器的缓存和Cookie
  • 或者使用浏览器的隐私模式访问,避免缓存影响测试结果

这样配置后,无论是访问http://yourdomain.com还是http://yourdomain.com/any-path,都会自动跳转到https://yourdomain.com/any-path,且URL中不会出现/public/路径。

内容的提问来源于stack exchange,提问作者Teretto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:01:06