如何使用mod_rewriteredirect包含多个查询string的多个特定的URL?

我们最近将一个网站从一个自定义CMS迁移到了drupal。 为了保留用户collections的某些链接(我们有大约120次redirect),我们希望将原始url转发到新的url。

我一直在寻找几天,但似乎无法find任何我所需要的简单。

我们有现有的URLs包含一个或多个查询string,例如:
/article.php?issue_id=12&article_id=275

我们想转到新的位置:
http://foobar.edu/content/super-happy-fun-article

我开始使用:

 RewriteEngine On  
 RewriteRule ^ / article \ .php?issue_id = 12&article_id = 275 $ http://foobar.edu/content/super-happy-fun-article [R = 301,L]  

但是,这不起作用。

一个简单的RewriteRule工程:

 RewriteRule ^ test \ .php $ index.php  

目前还不清楚我需要如何使用{QUERY_STRING}

基本上,它是从一个现有的URL到一个新的120个简单的redirect。 我不需要范围[0-9],因为现有的URL没有顺序。

也许我可以用RewriteMap和一个简单的文本文件来完成我所需要的工作:

  index.php?issue_id = 12&articleType_section = 0&articleType_id = 65 http://foobar.edu/category/fall-2008

如果任何人有任何想法使用mod_rewrite来实现这一点,或者如果有一个更好的,或更简单的国防部,我也打开。

谢谢!

为每一个可能过时的链接做一个重写规则并不是很有效。 所以可能你最好的select是发出一个PHPredirect到新的链接。 创build一个parsing$ _REQUEST并创build'new'链接的函数'generateLink',然后发出一个header("Location: $newLink", '', 301) 。 在生成任何输出之前调用article.php顶部的generateLink(),否则header()将失败)

如果你需要快速的做,你不能只写一个新的article.php转发到正确的drupal页面吗?

 <?php $locations[12][275] = 'content/super-happy-fun-article'; $issue = $_GET['issue_id']; $article = $_GET['article_id']; if(isset($locations[$issue][$article]){ $go = $locations[$issue][$article]; } else{ $go = 'broken_link' } header( 'Location: http://www.yoursite.com/'. $go ); 

RewriteRules(默认)只能在URL部分工作,而不能在查询部分(后面的部分?)上工作。 要build立根据查询部分触发的规则,您需要为查询string设置条件

 RewriteCond %{QUERY_STRING} ^issue_id=12&article_id=275$ RewriteRule ^/article\.php http://foobar.edu/content/super-happy-fun-article [R=301,L] 

得到像你所要求的东西。

但有120个redirect,使用定制article.php的想法更好。