优化htaccess实现友好URL,隐藏重复后缀并保留参数传递
解决URL后缀冗余并保留rubro变量传递的.htaccess配置方案
问题背景
当前.htaccess规则生成的URL如https://ugocd.com/diseno-grafico/Accordion-Brochure/diseno_grafico,末尾的diseno_grafico、diseno_web等后缀重复无意义,需要隐藏该部分,同时确保后台能正常接收rubro变量。
可行解决方案
需分两步配置:301重定向旧URL(保障SEO和用户跳转)和更新内部重写规则(支持简洁URL映射)。
1. 添加301重定向规则
将旧的带后缀URL永久跳转到新的简洁URL,需放在所有规则最前面:
RewriteEngine On # 重定向旧的带后缀URL到简洁版本 RewriteRule ^diseno-grafico/([^/.]+)/diseno_grafico$ /diseno-grafico/$1 [R=301,L] RewriteRule ^diseno-web/([^/.]+)/diseno_web$ /diseno-web/$1 [R=301,L] RewriteRule ^ilustracion/([^/.]+)/ilustracion$ /ilustracion/$1 [R=301,L] RewriteRule ^arte/([^/.]+)/arte$ /arte/$1 [R=301,L] RewriteRule ^animacion/([^/.]+)/animacion$ /animacion/$1 [R=301,L] RewriteRule ^proyectos/([^/.]+)/proyectos$ /proyectos/$1 [R=301,L] RewriteRule ^ilustracion/galeria-clasica/([^/.]+)/ilustracion$ /ilustracion/galeria-clasica/$1 [R=301,L]
2. 更新内部重写规则
去掉原规则中对后缀的捕获,直接从URL的分类前缀提取rubro变量的值:
# 简洁URL映射到后台脚本,传递id和rubro变量 RewriteRule ^diseno-grafico/([^/.]+)$ diseno-grafico-filtro?id=$1&rubro=diseno_grafico [L] RewriteRule ^diseno-web/([^/.]+)$ diseno-web-filtro?id=$1&rubro=diseno_web [L] RewriteRule ^ilustracion/([^/.]+)$ ilustracion-filtro?id=$1&rubro=ilustracion [L] RewriteRule ^arte/([^/.]+)$ arte-filtro?id=$1&rubro=arte [L] RewriteRule ^animacion/([^/.]+)$ animacion-filtro?id=$1&rubro=animacion [L] RewriteRule ^proyectos/([^/.]+)$ proyectos-filtro?id=$1&rubro=proyectos [L] RewriteRule ^ilustracion/galeria-clasica/([^/.]+)$ galeria-clasica?id=$1&rubro=ilustracion [L]
之前尝试失败的原因
- 第一种规则未修改捕获逻辑,仍要求URL带后缀才能匹配,无法实现简洁URL;
- 第二种重定向规则范围过宽,仅针对
diseno_web后缀,未覆盖所有分类,且未配合内部重写规则完成完整映射。
内容的提问来源于stack exchange,提问作者UGO CD
相关产品推荐
相关产品推荐

