为什么除了这两个之外,我的其他 301 重定向都有效?(不是查询字符串)

为什么除了这两个之外,我的其他 301 重定向都有效?(不是查询字符串)

我有一个包含 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 行开始。

http://pastie.org/2371768

答案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 中。这会带来更大的安全威胁,因为人们可以自由下载并利用它对付您。至于失败的重定向...目标页面是否与规则中引用的完全不同?

相关内容