20

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

4

2 回答 2

39

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

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

RewriteCond %{QUERY_STRING}  ^p=375$
RewriteRule (.*)  http://www.example.org/content/MyNewPage?  [R=301,L]
于 2012-10-25T16:56:03.323 回答
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>
于 2012-10-25T17:07:13.190 回答