如何根据查询字符串重定向URL?

时间:2012-10-25 16:38:43

标签: apache .htaccess mod-rewrite redirect

我成功地将Wordpress网站大规模迁移到了Drupal。不幸的是,在Wordpress中,内容网址类似于www.example.org/?p=123。我的域名仍然相同,但我想通过htaccess进行重定向,因为Drupal不会允许网址为www.example.org/?p=123。换句话说,内容与Wordpress中的内容不同。例如,新的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列表的顶部,因此将首先对其进行评估。我该如何解决?

2 个答案:

答案 0 :(得分:32)

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

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

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

答案 1 :(得分: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>