htaccess 301重定向子目录更深一层 - 为什么这不起作用?

时间:2012-02-08 14:01:43

标签: wordpress .htaccess redirect

这可能是一个愚蠢的问题,但我确实遇到了麻烦,如何重定向

/ products to / products / item

这是一个简单的重定向,不需要正则表达式。顶级站点/产品应始终重定向到/ products / item

我试过了:

<IfModule mod_rewrite.c>
RedirectMatch 301 /products(.*) /products/item/$1
</IfModule>

我收到错误,即网络服务器在无限循环中重定向。这可能是因为htaccess文件的其余部分。看起来像这样:

# Custom Rules
<IfModule mod_rewrite.c>
RedirectMatch 301 /products(.*) /products/item/$1
</IfModule>

# 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>

# END WordPress

但最奇怪的是:当我加载页面时,我收到错误。当我点击重新加载时,它可以工作???

感谢您的帮助! OLE

3 个答案:

答案 0 :(得分:1)

在此表达式中

  

RedirectMatch 301 /products(.*)/ products / item / $ 1

/products(.*)也会匹配/products/item,并会导致您观察到的无限重定向。

您可以尝试以下规则

#if its not already products/item, redirect to products/item
RewriteRule ^(products)/(?!item/)(.*)$ $1/item/$2 [L,NC,R=301] 

将此规则放在RewriteBase /

之后

答案 1 :(得分:1)

解决方案:

RedirectMatch 301 ^/products/?$ /products/item
/?允许它匹配/ products和/ products /

答案 2 :(得分:0)

RewriteCond $0 !^products/item
RewriteRule ^(products)(.*)$ $1/item$2 [L,NC,R=301]