You need to enable JavaScript to run this app. Laravel移除URL中/index.php/并强制HTTPS及404错误问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Laravel移除URL中/index.php/并强制HTTPS及404错误问题求助

问题根因

你遇到的两个故障均由重写规则执行顺序错误导致:

  1. 原配置把HTTPS跳转规则放在了入口转发规则之后,入口转发标记了[L](终止当前轮次重写),因此HTTP请求永远不会走到HTTPS跳转逻辑
  2. 直接添加移除index.php/的规则没有加请求来源判断,会和内部转发逻辑冲突,导致重定向循环或404
正确配置方案

将public/.htaccess内容替换为以下配置即可:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # 1. 优先强制HTTPS跳转
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # 2. 移除URL中的/index.php/前缀(匹配实际用户请求,避免内部重写冲突)
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php/([^\ ]*)\ HTTP/
    RewriteRule ^index.php/(.*) /$1 [R=301,L]

    # 3. 处理Authorization头
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # 4. 非目录的请求移除尾部斜杠
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # 5. 内部转发所有非静态资源请求到index.php(不会暴露到地址栏)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
生效注意事项

修改完成后需要清空浏览器缓存,301永久重定向会被浏览器长期缓存,旧的错误规则缓存会导致配置看起来不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 02:42:02