我们最近将一个网站从一个自定义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的想法更好。