You need to enable JavaScript to run this app. .htaccess重写规则附带domain参数时根路径请求不生效问题
优惠活动
大模型
产品
解决方案
定价
更多

.htaccess重写规则附带domain参数时根路径请求不生效问题

根路径重写失效的核心原因

根路径请求无法正常附加参数,问题出在前置判断条件,和重写规则的匹配写法无关:

  • 当前配置的两个判断逻辑为:请求指向的不是文件、请求指向的不是目录,满足才触发重写
  • 当访问https://example.com/时,服务器识别到的请求目标就是站点根目录本身——这是一个真实存在的目录,直接被!-d的判断拦截,根本走不到后续的重写规则执行环节,自然无法携带指定参数
  • 之前尝试替换^(.*)$、.这类匹配模式没有效果,就是因为请求在条件判断阶段就被过滤了,根本没进入规则匹配流程
适配需求的正确配置

调整判断逻辑,把根路径从"真实目录就排除"的规则里单独摘出来,既保留"非文件、非目录请求才重写"的原有逻辑,又让根路径请求可以正常触发重写带参:

RewriteEngine On

# 条件1:排除所有指向真实文件的请求
RewriteCond %{REQUEST_FILENAME} !-f
# 条件2:满足任意一个分支即可通过
# 分支1:请求为根路径,直接通过,不受"真实目录"判断限制
RewriteCond %{REQUEST_URI} ^/$ [OR]
# 分支2:请求指向的不是真实目录,正常通过
RewriteCond %{REQUEST_FILENAME} !-d

# 执行重写,保留原有附加参数逻辑
RewriteRule ^(.*)$ /index.php?domain=%{HTTP_HOST}&page=$1 [L,QSA]
配置运行逻辑说明
  • 整套判断逻辑为:仅当请求同时满足「不是真实文件」+「是根路径 或 不是真实目录」时,才会触发重写
  • 访问根路径/时,不受真实目录的判断限制,正常触发重写;此时正则匹配到的$1为空字符串,index.php接收到的page参数为空,刚好匹配首页的业务逻辑
  • 访问非根的真实目录(如/static/)时,会被正常拦截,不会触发重写,完全符合初始需求
  • 访问非根的不存在路径(如/news/123)时,既不是文件也不是目录,正常重写并携带对应路径作为page参数
  • 访问真实静态文件时,会被第一重条件直接拦截,不触发重写,保证静态资源可正常访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 09:36:04