如何通过.htaccess实现指定URL的精准301重定向(排除子目录)
解决方案:精准重定向指定URL而排除子目录
方法1:使用RedirectMatch(推荐,无需额外模块)
RedirectMatch 支持正则表达式,可以精准匹配URL的结尾。在你的Apache配置文件或.htaccess里添加这条规则:
RedirectMatch 301 ^/courses/company/$ /courses/
^匹配URL的起始位置$匹配URL的结束位置
这样只会精准匹配/courses/company/,像/courses/company/123/这类带后缀子目录的URL不会被匹配到。
方法2:使用mod_rewrite(适合已有rewrite规则的场景)
如果你的服务器已经启用mod_rewrite,也可以用这条规则:
RewriteEngine On RewriteRule ^courses/company/$ /courses/ [R=301,L]
[R=301]表示永久重定向[L]表示这是最后一条匹配规则,避免后续规则干扰
为什么你之前的尝试没生效?
- 最初的
Redirect 301 /courses/company/ /courses/是前缀匹配:只要URL以/courses/company/开头就会触发重定向,所以带子目录的URL也会被匹配。 - 后来的
Redirect 301 /courses/company/$ /courses/无效,是因为Redirect指令不支持正则表达式,$会被当作URL的一部分去查找,实际不存在这个路径,所以不会触发重定向。
内容的提问来源于stack exchange,提问作者Keith Taylor
相关产品推荐
相关产品推荐

