请求帮助:.htaccess 301重定向移除URL中指定目录段
解决.htaccess中移除directory目录的301重定向问题
没问题,这其实是个非常常见的URL重定向需求,我给你整理了几种可靠的方案,你可以根据自己的服务器配置情况选择:
方案1:基础永久重定向规则
这是最直接的写法,适用于绝大多数Apache服务器环境。先确保你的网站根目录的.htaccess文件已经开启了重写引擎,然后添加以下规则:
RewriteEngine On # 将 /directory/page/xxx 永久重定向到 /page/xxx RewriteRule ^directory/page/(.*)$ /page/$1 [R=301,L]
我给你拆解下每个部分的作用:
RewriteEngine On:必须放在所有重写规则的最前面,用来开启Apache的URL重写模块^directory/page/(.*)$:这是匹配规则,^表示路径开头,(.*)是一个捕获组,会把directory/page/后面的所有内容(比如文章ID、URL后缀)都保存下来/page/$1:这是重定向的目标路径,$1会替换成刚才捕获组里保存的内容,这样就完美保留了原URL后半部分的信息[R=301,L]:R=301代表这是永久重定向(对SEO非常友好,搜索引擎会更新索引);L表示这是最后一条规则,匹配到后就不再处理后续的重写规则
方案2:带域名限定的严谨写法
如果你的服务器托管了多个域名,或者担心规则影响其他子域名,可以加上域名匹配条件,确保只对mysite.com生效:
RewriteEngine On # 仅对 mysite.com 域名生效(不区分大小写) RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] RewriteRule ^directory/page/(.*)$ /page/$1 [R=301,L]
这里的[NC]是No Case的缩写,意思是匹配域名时不区分大小写,避免因为大小写差异导致规则失效。
重要注意事项
- 测试阶段建议先用
R=302(临时重定向),确认重定向逻辑完全正确后再改成R=301——因为301是永久重定向,浏览器会缓存这个规则,后续修改可能需要清理缓存才能生效 - 确保你的Apache服务器已经启用了
mod_rewrite模块(绝大多数虚拟主机和服务器默认都是开启的,如果不确定可以联系主机商确认) - 如果网站根目录没有
.htaccess文件,直接新建一个即可,注意文件名是**.htaccess**(前面的点不能少,这是Unix系统的隐藏文件) - 修改完
.htaccess后,记得清理浏览器缓存或者用无痕模式测试,避免旧规则干扰
内容的提问来源于stack exchange,提问作者Anton Sharikov
相关产品推荐
相关产品推荐

