【问题标题】:htaccess rewrite for a rewritten URL that is already indexed by Googlehtaccess 重写已被 Google 索引的重写 URL
【发布时间】:2013-01-26 18:17:18
【问题描述】:

例子:

1) 网址(结构不佳)已被 Google 编入索引:
www.abc.com/index.php?product=zzz

2) 使用以下重写规则重写 URL:
RewriteRule ^zzz$ index.php?product=zzz [L,NC]

上述工作正常,但我们想告诉 Google 该页面已从 (1) URL www.abc.com/index.php?product=zzz 中的 URL 永久移动到 (2) www 中的 URL .abc.com/zzz

3) 现在我们在规则 (2) 之上应用以下规则:
RewriteCond %{QUERY_STRING} ^product=zzz [NC]
重写规则索引http://www.abc.com/zzz? [L,R=301]

这会导致无限循环。我们如何告诉 Google 我们的网站已从 www.abc.com/index.php?product=zzz 更改为 www.abc.com/zzz?还是 Google 会自己做这件事?

-----当前完整的 htaccess 规则导致无限循环:-----

RewriteCond %{QUERY_STRING} ^product=zzz [NC]
重写规则索引http://www.abc.com/zzz? [L,R=301]

重写规则 ^zzz$ index.php?product=zzz [L,NC]

【问题讨论】:

    标签: .htaccess seo


    【解决方案1】:

    用此代码替换您现有的规则:

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?product=([^\s&]+) [NC]
    RewriteRule ^ /%1? [R=301,L]
    
    RewriteRule ^(zzz)/?$ /index.php?product=$1 [L,NC,QSA]
    

    【讨论】:

    • 您的解决方案完美运行!您愿意解释一下所涉及的内容,以及与我使用的规则有什么不同吗?
    • 主要区别在于使用THE_REQUEST,它代表Apache 接收到的原始HTTP 请求,并且不会被各种RewriteRule 语句覆盖。您的规则作用于字符串索引,该索引也与重写的 URI index.php?product=zzz 匹配,因此这些规则将进入无限循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 2016-04-08
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多