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

Laravel index.php与.htaccess重定向规则冲突问题求助

Laravel 9.x .htaccess规则冲突解决方案:同时实现协议/子域名重定向与隐藏index.php

核心思路

先处理协议转换(HTTP→HTTPS)、子域名重定向(www→非www、mail子域名跳转),确保完整保留请求路径与参数;再处理index.php去除重定向;最后保留Laravel默认的前端控制器转发规则,保证路由正常工作。

完整.htaccess配置

<IfModule mod_rewrite.c>
    RewriteEngine On

    # 1. 处理mail子域名重定向(示例:跳转到邮箱服务页面,可根据需求修改跳转目标)
    RewriteCond %{HTTP_HOST} ^mail\.myfakedomain\.com$ [NC]
    RewriteRule ^(.*)$ https://myfakedomain.com/mail-service/$1 [L,R=301]

    # 2. HTTP转HTTPS + www转非www,完整保留请求路径与查询参数
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} ^www\.myfakedomain\.com$ [NC]
    RewriteRule ^(.*)$ https://myfakedomain.com/$1 [L,R=301,QSA]

    # 3. 去除URL中的index.php,永久重定向
    RewriteCond %{THE_REQUEST} /index\.php/([^\s?]+) [NC]
    RewriteRule ^ /%1 [L,R=301,QSA]
    RewriteCond %{THE_REQUEST} /index\.php\s [NC]
    RewriteRule ^ / [L,R=301,QSA]

    # 4. Laravel默认前端控制器规则(转发所有请求到index.php,隐藏index.php)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

规则说明

  • mail子域名重定向:匹配mail.myfakedomain.com开头的请求,跳转到指定路径,$1保留原请求路径,[NC]忽略大小写,[L,R=301]表示永久重定向并停止后续规则。
  • HTTP转HTTPS + www转非www:通过OR匹配两种异常情况,QSA参数确保查询字符串(如?id=1)被完整保留,$1传递原始请求路径,避免跳转后丢失URL后缀。
  • 去除index.php:通过%{THE_REQUEST}匹配用户真实发起的请求(避免内部转发规则干扰),分别处理带路径的index.php/xxx和仅index.php的两种场景,重定向到干净的URL。
  • Laravel默认规则:仅当请求的文件/目录实际不存在时,才将请求转发到index.php,既保证静态资源正常访问,又实现index.php的隐藏效果。

注意事项

  • 替换所有myfakedomain.com为你的实际域名。
  • 确保服务器已开启mod_rewrite模块。
  • 测试阶段可暂时将R=301改为R=302临时重定向,确认规则无误后再改回301永久重定向(利于SEO)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:06:32