301重定向不适用于查询字符串

时间:2013-08-27 04:09:18

标签: php apache .htaccess redirect mod-rewrite

我的.htaccess文件包含一些301重定向。请参阅下面的.htaccess代码。第三个301重定向工作正常。但第一次和第二次重定向正在产生404 Page not found结果。我搜索了SO和谷歌并找到了一些解决方案。但他们都没有工作。

以下是我的.htaccess文件:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Redirect 301 /page.php?page=8  http://www.mydomain.com/about-us/

Redirect 301 /page.php?page=5  http://www.mydomain.com/contact-us/

Redirect 301 /testimonial.php http://www.mydomain.com/testimonials/

请建议。

2 个答案:

答案 0 :(得分:1)

我认为,如果你这样做,它可以工作(根据这个http://httpd.apache.org/docs/current/en/mod/mod_alias.html#redirect):

Redirect 301 /page.php http://www.mydomain.com/contact-us/

但它并没有达到你的预期。 所以我建议这些规则

RewriteCond %{QUERY_STRING} (^|&)id=8(&|$)
RewriteRule ^page\.php http://www.mydomain.com/about-us/ [R=301,L]

RewriteCond %{QUERY_STRING} (^|&)id=5(&|$)
RewriteRule ^page\.php http://www.mydomain.com/contact-us/ [R=301,L]

我真的不知道这是不是最好的方式。

答案 1 :(得分:1)

我已经尝试了许多在SO和google.com上找到的;没有任何效果。最后,我使用了不同的方法。我已经创建了page.php文件,并在那里使用了以下代码:

$page = $_GET['page'];
switch ($page) {
case 6:
$link = 'http://webindream.com/about-us/';
break;

case 7:
$link = 'http://webindream.com/contact-us';
break;

default: 
$link = 'http://webindream.com/';


}

header("Location: $link", true, 301);

希望这可以帮助某人摆脱.htaccess并顺利重定向。