重定向301& Mod重写问题

时间:2009-12-30 16:21:51

标签: .htaccess mod-rewrite redirect http-status-code-301

我有一个在线商店,例如,位于:hxxp://domain.com/store/

在商店目录的.htaccess文件中,我有:

Options +FollowSymlinks
RewriteEngine on
RewriteBase /store/
RewriteCond %{HTTP_HOST} !^www.domain.com$
RewriteRule ^(.*)$ http://www.domain.com/store/$1 [R=301]
RewriteRule ^/?$ directory.php
RewriteRule ^search/?$ search.php
RewriteRule ^category/([a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\?\_\-\ ]+)/?$ product.php?CategoryID=$1 [QSA]
RewriteRule ^([a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\?\_\-\ ]+)/?$ product/detail.php?ProductID=$1 [QSA]

效果很好!

我的问题(问题)是我现在需要将/ store /目录更改为/ shop /这看起来很简单。但是,我需要设置正确的301重定向,以便我不会丢失任何我可能拥有的SE排名。

在这种情况下设置301重定向的最佳方法是什么?

我找到的唯一解决方案是为商店中的每个类别,产品等设置重定向301。像这样,例如。

Redirect 301 /store/category/sample-widgets/ hxxp://www.domain.com/shop/category/sample-widgets/

这可行并且我需要它,但是......地址栏中的URL显示如下:hxxp://www.domain.com/shop/category/sample-widgets/?CategoryID = sample-窗口小部件

我无法弄清楚为什么或如何删除查询字符串。

请帮忙。感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用PHP脚本处理重定向来处理301错误。

在.htaccess文件中,您可以添加以下规则:

Redirect 301 /error301.php

创建文件error301.php:

<?php

$redirects = array('/path/to/old/page/' => '/path/to/new/page/',
                   '/store/category/sample-widgets/' => '/shop/category/sample-widgets/');

if (array_key_exists($_SERVER['REQUEST_URI'], $redirects))
{
    $dest = 'http://'.$_SERVER['HTTP_HOST'].$redirects[$_SERVER['REQUEST_URI']];
    header("Location: {$dest}", TRUE, 301); // 301 Moved Permanently
}

答案 1 :(得分:0)

您可以使用简单的Redirect指令,如:

Redirect 301 /store/ /shop/

或者,如果您也想使用mod_rewrite,则需要更改当前规则,因为您不能再使用基本网址/store/

RewriteEngine on
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,R=301]
RewriteRule ^store/?([^/].*)?$ /shop/$1 [L,R=301]
RewriteRule ^shop/?$ directory.php
RewriteRule ^shop/search/?$ shop/search.php
RewriteRule ^shop/category/([a-zA-Z0-9!@#$%^&*()?_\-\ ]+)/?$ product.php?CategoryID=$1 [QSA]
RewriteRule ^shop/([a-zA-Z0-9!@#$%^&*()?_\-\ ]+)/?$ product/detail.php?ProductID=$1 [QSA]