如何根据查询字符串重定向 URL?
Posted
技术标签:
【中文标题】如何根据查询字符串重定向 URL?【英文标题】:How to redirect URLs based on query string? 【发布时间】: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 列表的顶部,因此将首先对其进行评估。我该如何解决?
【问题讨论】:
【参考方案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 redirect
s
好建议,但现在 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>
【讨论】:
以上是关于如何根据查询字符串重定向 URL?的主要内容,如果未能解决你的问题,请参考以下文章
IIS URL 重写模块:基于 QueryString 的重定向