我有一个包含 100 多个重定向的列表,除了两个之外,几乎所有重定向似乎都有效。我使用 htaccess 301 重定向的通用格式:
redirect 301 /shop/category.cfm/wall-decals http://wallcandyarts.com/wall-decals.html
据我所知,这个没什么问题。我遇到问题是这两个:
redirect 301 /shop/product.cfm/chalkboard-wall-panels http://wallcandyarts.com/chalkboard-decals/chalkboard-panels.html
redirect 301 /shop/category.cfm/chalkboard-decals http://wallcandyarts.com/chalkboard-decals.html
我读过有关查询字符串的问题,但这里不是这种情况。我还看到,在汇编此重定向列表时,如果新路径以“/”结尾,它将导致它获得与上述重定向类似的结果。例如,单击http://www.wallcandyarts.com/shop/product.cfm/chalkboard-wall-panels会给你一个“混乱的” URL,我不知道为什么。有什么想法吗?
这是我第一次尝试使用 htaccess 做如此复杂的工作,而且不涉及简单的复制/粘贴,所以请原谅我的无知。希望能学到很多东西。
谢谢!
更新:这是整个 htaccess。在我添加 301 指令之前,有很多东西都在那里。我添加的代码从第 181 行开始。
答案1
其他方法对你有用吗?我试过几种,每种方法/shop
都会导致我的浏览器出现问题wall-decals.html
。
http://wallcandyarts.com/shop/product.cfm/seasons-designer-pillows
变成http://wallcandyarts.com/wall-decals.html/product.cfm/seasons-designer-pillows
。
罪魁祸首是你的最后一句话:
redirect 301 /shop http://wallcandyarts.com/wall-decals.html
该Redirect
指令基于前缀匹配。正如文档所述:
Redirect /service http://foo2.bar.com/service
If the client requests http://myserver/service/foo.txt, it will be told to access http://foo2.bar.com/service/foo.txt instead.
这条捕获所有 的最后一条规则/shop
会破坏针对 下内容的所有规则/shop
。我不完全确定 的评估/优先级是如何处理的Redirect
,但RedirectMatch
可能更适合您的需求(或者,至少应该用于最后一条规则)。
RedirectMatch 301 ^/shop/product\.cfm/frames-wall-decals$ http://wallcandyarts.com/wall-decals/frames-decals.html
...
RedirectMatch 301 ^/shop/?$ http://wallcandyarts.com/wall-decals.html
答案2
首先,您应该将所有代码限制在您的 httpd.conf 文件中,而不是 htaccess 中。这会带来更大的安全威胁,因为人们可以自由下载并利用它对付您。至于失败的重定向...目标页面是否与规则中引用的完全不同?