.htaccess 301重定向:排除主页的规则配置问题求助
解决301重定向排除主页的问题
嘿,我来帮你搞定这个精准重定向的需求!核心就是要让服务器识别出「主页index.html」和「其他.html页面」的区别,下面分两种最常用的Web服务器给你具体配置方案:
Nginx 配置方案
Nginx的规则匹配有优先级,我们可以利用这个特性先锁定主页,不让它被重定向,再处理其他.html页面:
- 先给主页单独写一条精确匹配规则(优先级最高):
location = /index.html { # 这里保留主页的正常配置即可,不需要重定向 root /path/to/your/website; index index.html; }
- 再写匹配所有其他.html页面的重定向规则:
location ~* \.html$ { return 301 https://www.newexample.com$request_uri; }
说明:location = /index.html是精确匹配,优先级远高于后面的正则匹配,所以主页会被优先处理,不会触发重定向;而其他所有以.html结尾的页面都会进入第二条规则,被301重定向到新域名的对应路径。
Apache 配置方案
Apache需要借助mod_rewrite模块,先确保你的服务器已经开启了这个模块,然后在.htaccess文件或者虚拟主机配置里添加以下规则:
RewriteEngine On # 排除主页:请求路径不是/index.html才继续执行重定向 RewriteCond %{REQUEST_URI} !^/index\.html$ # 匹配所有.html结尾的页面,重定向到新域名对应路径 RewriteRule ^(.*)\.html$ https://www.newexample.com/$1.html [R=301,L]
说明:
RewriteCond的!^/index\.html$表示「请求URI不等于/index.html」(!是取反,^和$确保完全匹配,避免误排除带参数的主页链接)[R=301,L]里的R=301指定是永久重定向,L表示这是最后一条规则,匹配到后就不再往下执行
测试与注意事项
- 配置完成后,记得重启Web服务器:Nginx用
nginx -s reload,Apache根据系统用apache2 restart或httpd restart - 可以用
curl -I http://www.oldexample.com/index.html测试主页,应该返回200状态码;测试其他页面比如curl -I http://www.oldexample.com/about.html,应该返回301并指向新域名的对应页面 - 如果有其他重定向规则,记得把「排除主页」的规则放在最前面,避免被其他规则覆盖
内容的提问来源于stack exchange,提问作者Dentos Gabi
相关产品推荐
相关产品推荐

