如何编写.htaccess重写规则实现ex.com跳转function.php并拆分URL参数
配置问题修正说明
你写的配置存在多处错误,无法实现需求,错误点如下:
- 规则逻辑顺序错误,且原main.com的路由规则未绑定域名条件,ex.com的请求会优先被匹配到index.php的路由,根本走不到后面的ex.com专属规则
- ex.com的路径匹配未限制数字长度为1-8位,不符合需求
- 参数拼接语法错误,
$1和num之间少了&分隔符,会导致参数解析错误 [QSA, L]标记中间存在空格,属于语法错误,Apache无法识别- 缺少根域名直接访问跳转至function.php的规则
- 重复声明
RewriteEngine On无意义,全局只需要声明一次即可
正确配置代码
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # ------------ main.com 专属规则 ------------ # 给main.com设置HTTP_AUTHORIZATION环境变量 RewriteCond %{HTTP_HOST} ^(www\.)?main\.com$ RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteCond %{HTTP_HOST} ^(www\.)?main\.com$ RewriteRule ^index\.php$ - [L] RewriteCond %{HTTP_HOST} ^(www\.)?main\.com$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # ------------ ex.com 专属规则 ------------ # 规则1:直接访问根域名跳转至function.php RewriteCond %{HTTP_HOST} ^(www\.)?ex\.com$ RewriteRule ^$ /function.php [L] # 规则2:匹配/3位字符+1-8位数字的路径,拆分参数 RewriteCond %{HTTP_HOST} ^(www\.)?ex\.com$ # {3}匹配3位任意大小写字母数字,[0-9]{1,8}匹配1到8位数字 RewriteRule ^/?([0-9A-Za-z]{3})([0-9]{1,8})$ /function.php?tt=$1&num=$2 [QSA,L] </IfModule>
规则说明
- 所有规则都绑定了对应的域名条件,两个域名的路由完全隔离不会互相干扰
- QSA标记会自动将原URL自带的查询参数追加到目标地址后,无需手动处理,满足参数原样保留的需求
- 路径匹配规则严格限制了数字长度为1-8位,符合需求
- 根路径访问规则单独处理,满足直接访问ex.com跳转至function.php的要求
- 所有[L]标记保证匹配到对应规则后停止向下匹配,避免冲突
内容的提问来源于stack exchange,提问作者insounds
相关产品推荐
相关产品推荐

