如何通过.htaccess实现长URL转短链接且服务原长URL内容
实现方案
你现有的配置已经完成了「短URL访问时返回对应动态页面内容」的内部重写逻辑,只需要补充一套外部重写规则,把用户直接访问的带参数原始地址重定向为短URL格式即可,完整配置如下:
RewriteEngine on # 原有HTTPS/域名标准化规则 RewriteCond %{HTTP_HOST} !^www\.website\.com$ [NC] RewriteRule ^(.*)$ https://www.website.com/$1 [R=301,L] # 新增:将带t参数的原始地址外部重定向为短URL格式 RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{QUERY_STRING} ^t=([0-9a-f]{6})$ [NC] RewriteRule ^index\.php$ /%1? [R=301,L] # 原有:短URL内部重写到实际处理脚本 RewriteRule ^([0-9a-f]{6})$ index.php?t=$1 [L]
规则说明
RewriteCond %{ENV:REDIRECT_STATUS} ^$用于判断请求是用户直接发起的外部请求,不是服务器内部重写产生的子请求,避免重定向循环RewriteCond %{QUERY_STRING} ^t=([0-9a-f]{6})$ [NC]匹配查询字符串中t参数为6位十六进制字符的情况,加NC参数可同时支持大写、小写的十六进制编码- 重写规则末尾的
?作用是丢弃原始请求的查询字符串,避免重定向后地址栏残留t=xxx参数 - 调试阶段建议把
R=301改成R=302,等确认所有跳转逻辑符合预期再换回301,避免浏览器缓存错误的301规则影响测试 - 你问题示例中的
www.website.com/index/php?t=5f33ee属于笔误,实际场景下应为www.website.com/index.php?t=5f33ee,上述规则针对正确的index.php路径做匹配。
内容的提问来源于stack exchange,提问作者MrMills
相关产品推荐
相关产品推荐

