如何通过htaccess配置Rewrite规则将动态slug参数路径重写为简洁URL
调整后的完整.htaccess配置
RewriteEngine On # 排除真实存在的文件、目录,避免拦截静态资源、系统默认路径 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 同时匹配带/不带尾部斜杠的分类路径,将slug参数传给category.php RewriteRule ^([^/]+)/?$ /category.php?slug=$1 [L]
规则调整说明
- 新增2条
RewriteCond前置判断:只有当访问路径不属于真实存在的静态文件(图片、CSS、JS等)、不属于真实存在的站点目录时,才会触发后续重写逻辑,避免正常资源访问被拦截 - 重写规则的匹配逻辑优化:
- 将
[^/]*调整为[^/]+,避免匹配站点根目录的空路径 - 末尾新增
/?标识,兼容尾部带斜杠和不带斜杠的两种访问格式,捕获的slug参数会自动剔除尾部斜杠,两种路径访问返回的内容完全一致
- 将
可选补充配置(统一URL格式)
如果需要避免两种路径被搜索引擎判定为重复内容,可以在RewriteEngine On后新增以下规则,强制将无尾部斜杠的路径301重定向到带斜杠的格式:
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)$ /$1/ [L,R=301]
生效排查要点
- 确认Apache服务器已开启
mod_rewrite扩展 - 确认站点的虚拟主机配置中
AllowOverride参数已设置为All,否则.htaccess文件不会被加载 - 测试前清理浏览器缓存,重定向规则会被浏览器长期缓存,建议用无痕模式测试
内容的提问来源于stack exchange,提问作者HarsimranSingh
相关产品推荐
相关产品推荐

