RedirectMatch 301规则与htaccess中的RewriteRule冲突

时间:2016-06-07 10:10:27

标签: apache .htaccess mod-rewrite

我想为来自/ category / groceries-and-daily / household /

的请求设置301重定向

将它们重定向到:/ category / household /

我为这些请求设置了以下规则:

# The following is to redirect old urls
RedirectMatch 301 ^/category/groceries-and-everyday/household/$ /category/household/

# This is our rewrite rule for SEO friendly URLs
RewriteRule ^category/(.*)/$ /category_pages/category.php?category_string=$1&rewrite=1 [NC,QSA]

现在我加载/分类/杂货和日常/家庭

我被反弹到:/ category / household /?category_string = groceries-and-everyday / household& rewrite = 1

我希望这只能反弹到:/ category / household /

有人可以解释为什么会出现这种情况以及我应该做些什么来实现我想要的结果。

非常感谢

3 个答案:

答案 0 :(得分:0)

您可以尝试在第1条规则之前放置第2条规则吗?基本上切换它们。

答案 1 :(得分:0)

您需要从规则中排除uri 类别/家庭

RewriteCond %{REQUEST_URI} !^/category/household    RewriteRule ^category/(.*)/$ /category_pages/category.php?category_string=$1&rewrite=1 [NC,QSA]

否则您的重写模式 ^ category /(.*)/$也会将其重写为 /category_pages/category.php?category_string=$1&rewrite=1

答案 2 :(得分:0)

对Starkeen的答案略有适应。

更改第二个htaccess规则以使其具有以下重写条件似乎有效。

RewriteCond %{REQUEST_URI} !^/category/groceries-and-everyday/household/(.*)
RewriteRule ^category/(.*)/$ /category_pages/category.php?category_string=$1&rewrite=1 [NC,QSA]