Htaccess无法正常工作 - 重定向301

时间:2013-05-21 22:37:01

标签: regex apache .htaccess mod-rewrite

由于网址不正确,我们生成了一些不起作用的链接,我想通过301重定向重定向它们以清除Google的一些网站管理员工具问题。

所以,我们有这样的网址:

http://www.site.com/subdomain/z//-products

*请注意,子域是可变的,其余的url是静态的。

作为旁注,这个URL毫无意义,这就是我想重定向它的原因。它应该是这样的:

http://www.site.com/bedroom/z/12345/bedroom-furniture-products

无论如何,我们有动态生成这些错误的URL。我们已经修复了它们,但谷歌选择了它们并继续尝试抓取它们。我想创建一个htaccess规则,301重定向它们,问题应该最终消失。

这是我尝试用htaccess无济于事的方法:

^(.*)/n//-products/?$ $1 [R=301,B]

我也尝试了各种各样的排列,但它不起作用。我怀疑这是一个逃避问题的实体,但是我的研究让我添加了[B],但这似乎也没有用。这就像重定向规则正在运行,但它只是重定向到原始页面。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

我认为anubhava是正确的,因为您描述的示例网址/subdomain/z//-products与您尝试应用的RewriteRule之间存在不一致。不确定这是否是拼写错误。甚至可能是您的复制/粘贴操作实际上实际上添加了“/ n”。

Anyhoo,让我们假设您希望规则适用于/subdomain/z//-products

RewriteRule ^/([^/]+)/z//\-products/?$ http://www.site.com/$1 [R=301]

请参阅the example 1 slides of this PDF获取快速的第一部分。它比使用(.*)快得多。

我们确实匹配z字符和周围的斜杠。我们转义-字符,然后我们执行URL的其余部分并选择性地匹配尾部斜杠。如果内存正确,我们使用“外部”样式重定向,以便机器人重新打开单独的HTTP连接,附加匹配的反向引用,并交出状态代码。

如果有效,请告诉我。

答案 1 :(得分:0)

通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在.htaccess目录下的DOCUMENT_ROOT中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^subdomain/z/-products/?$ /$1 [L,R=302,NC]

验证一切正常后,将R=302替换为R=301。在测试mod_rewrite规则时,请避免使用R=301(永久重定向)。