2012-10-25 66 views
15

我成功将一个Wordpress网站迁移到Drupal。不幸的是,在WordPress中,内容网址就像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列表的顶部,因此它将首先被评估。我该如何解决?

回答

29

无论是重定向还是RedirectMatch都不允许您指定重定向源的查询字符串。 [Source]

你必须使用国防部重写重定向基于查询字符串:

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

不幸的是,我被重定向到404页面未找到,我的网址仍然显示为http://www.example.org/?p=375。我可以确认“content/MyNewPage”确实存在并且有效。我也可以确认我的RewriteRules正在工作,因为它们在Drupal中工作正常。 – user785179

+0

清除浏览器的缓存并重试,浏览器缓存'301永久重定向' – undone

+0

好的建议,但是现在Firefox说它将重定向为一个无限循环。 “Firefox已经发现服务器正在以一种永远不会完成的方式重定向这个地址的请求。”网址是http://www.example.org/content/MyNewPage?p=375 – user785179

1

您可以考虑在你的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> 
+0

我试过你的方法,但是我进入了404错误页面。 – user785179

相关问题