【问题标题】:How can I use htaccess to remove a URL parameter but keep a dynamic element?如何使用 htaccess 删除 URL 参数但保留动态元素?
【发布时间】:2012-11-13 01:35:04
【问题描述】:

Google 在网站的侧边栏中发现了一个寻呼机,允许用户在访问博客条目时滚动浏览“标签”,每次寻呼机点击都会将您带到一个新的网址,例如example.com/blog/article-title?page=1.

由于博客有大约 500 个帖子,而分页器有大约 140 页标签,Google 为我的网站编入了非常多的页面。我不想要这个有很多原因。我已经删除了此标记块上的寻呼机,因为它完全没有必要,但现在想对所有这些 ?page=X URL 进行 301 重定向,希望随着时间的推移,Google 会将它们从索引中删除。

网址如下所示:

如何通过 htaccess 进行 301 重定向,将用户发送到 http://example.com/blog/blog-article-title

我尝试了很多变化

  • RewriteRule ^blog/(.*).?page(.*)$ /$1/blog/$2? [R=301,L]

  • RedirectMatch 301 ^/blog/(.*)\?page(.*)$ /blog/$1

但到目前为止还没有运气。任何帮助将不胜感激。

编辑:对于可能偶然发现这一点的其他人,Google 完全忽略了标头中定义的规范 URL,并将所有 30,000 多个 URL 组合编入索引。在下面接受的答案中进行 htaccess 重写是在这些页面上正确执行 301。当然,这需要我将寻呼机移到别处,但这已经在我的特定情况下得到处理。

【问题讨论】:

    标签: .htaccess mod-rewrite redirect


    【解决方案1】:
    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^/blog/
    RewriteCond %{QUERY_STRING} page
    RewriteRule (.*) /$1? [R=301,L]
    

    这应该实现你想要做的。

    【讨论】:

    • 这不会删除每个 URL 上的 ?page= 查询吗?在某些页面上,?page= 可能是必需的,即博客列表。
    • 我将代码更新为仅匹配 /blog/ 目录中的任何内容。
    • 太完美了。尝试了其他建议的几种变体,但无法让它们按预期工作。
    【解决方案2】:

    您的问题是您尝试重定向 URL 而不是查询字符串。看到这个问题:Query string redirection with htaccess

    基本上,您需要一个基于查询字符串的RewriteCond。这将是两条线;即:

    RewriteCond %{QUERY_STRING} ......
    RewriteRule ....
    

    【讨论】:

      【解决方案3】:

      如果没有 query_string 选项,这应该可以工作:

      RewriteEngine On
      # one url with many params
      #RewriteRule ^blog/blog-article?(.*) http://www.yourblog.com/index\.php$1 [R=301,L]
      # or many url
      RewriteRule ^blog/sub(.*)\?(.*) http://www.yourblog.com/onething/$1?$2 [R=301,L]
      

      如果这不起作用,您的脚本中可能还有其他问题。

      【讨论】:

        猜你喜欢
        • 2017-09-02
        • 1970-01-01
        • 2011-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-19
        • 1970-01-01
        相关资源
        最近更新 更多