【问题标题】:How to redirect URLs based on query string?如何根据查询字符串重定向 URL?
【发布时间】:2012-10-15 21:53:18
【问题描述】:

我成功地将一个 Wordpress 网站大规模迁移到 Drupal。不幸的是,在 Wordpress 中,内容 URL 类似于 www.example.org/?p=123。我的域仍然相同,但我想通过 htaccess 进行重定向,因为 Drupal 不允许 URL 为 www.example.org/?p=123。换句话说,内容与在 Wordpress 中的 URL 不同。例如,新的 Drupal URL 将类似于 www.example.org/content/MyNewPage

我在我的 .htaccess 文件中尝试过,但它不起作用

Redirect 301 /\?p=375 http://www.example.org/content/MyNewPage

所以我尝试了以下方法,但它也不起作用。

Redirect 301 /\?p\=375 http://www.example.org/content/MyNewPage

作为一个测试,我尝试了下面的方法并且成功了。

Redirect 301 http://www.example.org http://www.google.com

我确保我的重定向规则位于我的 .htaccess 列表的顶部,因此将首先对其进行评估。我该如何解决?

【问题讨论】:

    标签: apache .htaccess mod-rewrite redirect


    【解决方案1】:

    Redirect 和 RedirectMatch 都不允许您为重定向源指定查询字符串。 [Source]

    您必须使用 mod-rewrite 根据查询字符串进行重定向:

    RewriteCond %{QUERY_STRING}  ^p=375$
    RewriteRule (.*)  http://www.example.org/content/MyNewPage?  [R=301,L]
    

    【讨论】:

    • 不幸的是,我被重定向到未找到的 404 页面,并且我的 URL 仍然显示example.org/?p=375。我可以确认“内容/MyNewPage”确实存在并且有效。我还可以确认我的 RewriteRules 正在运行,因为它们在 Drupal 中运行良好。
    • 清除浏览器缓存再试一次,浏览器缓存301 Permanent redirects
    • 好建议,但现在 Firefox 说它正在重定向为无限循环。 “Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。”该 URL 显示为 example.org/content/MyNewPage?p=375
    【解决方案2】:

    你可以考虑在你的 htaccess 中使用 ModRewrite

    <IfModule mod_rewrite.c>
    
    RewriteEngine On
    
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteCond %{QUERY_STRING}     ^p=345$    [NC]
    RewriteRule index.php content/MyNewPage [NC,L,R=301]
    
    </IfModule>
    

    您还可能希望将旧页面 id 传递给连接的新 URL(或者可能通过 QS?):

    <IfModule mod_rewrite.c>
    
    RewriteEngine On
    
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteCond %{QUERY_STRING}     ^p=(.*)$    [NC]
    RewriteRule index.php content/MyNewPage-%1 [NC,L,R=301]
    
    </IfModule>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2013-01-10
      相关资源
      最近更新 更多