复杂301重定向的mod重写规则

时间:2012-05-15 12:59:16

标签: apache mod-rewrite

所以我在做一个有大约4,000个产品的网站,网址正在从旧网站改变,并且不想为每个网站制定301规则所以我已经完成了以下移动类别(下面的示例)

# Main Categories
RewriteRule ^(.*)home-page-categories/name-1\.html$ name-1/ [R=301,NC,L]
RewriteRule ^(.*)home-page-categories/name-2\.html$ name-2/ [R=301,NC,L]
RewriteRule ^(.*)home-page-categories/name-3\.html$ name-3/ [R=301,NC,L]
RewriteRule ^(.*)home-page-categories/name-4\.html$ name-4/ [R=301,NC,L]

所以上面的内容使home-page-categories/name-1.html成为一个目录/name-1/ - 太棒了!

# Artist Categories from Root Categories
RewriteRule ^(.*)home-page-categories/name-1/(.*)\.html$ name-1/$2/ [R=301,L]
RewriteRule ^(.*)home-page-categories/name-2/(.*)\.html$ name-2/$2/ [R=301,L]
RewriteRule ^(.*)home-page-categories/name-3/(.*)\.html$ name-3/$2/ [R=301,L]
RewriteRule ^(.*)home-page-categories/name-4/(.*)\.html$ name-4/$2/ [R=301,L]

然后抓住次要类别,例如/home-page-categories/name-1/example.html并将其设为name-1/example/ - 太棒了!

然而,在下一个级别,我需要携带产品名称,因此它将是:

/home-page-categories/name-1/example/product.html并将其设为name-1/example/product.html,但我认为上述规则可能与此相冲突。

关于可以处理这一切的规则的任何想法?

2 个答案:

答案 0 :(得分:0)

为了与您的示例保持一致,可以为name-1

提供解决方案
RewriteRule home-page-categories/name-1\.html$ /name-1/ [R=301,NC,L]
RewriteRule home-page-categories/name-1/([^/]+)\.html$ /name-1/$1/ [R=301,L]
RewriteRule home-page-categories/name-1/(.*)\.html$ /name-1/$1.html [R=301,L]

根据您希望实现的目标,您可以用

替换所有规则
RewriteRule home-page-categories/([^/]+)\.html$ /$1/ [R=301,NC,L]
RewriteRule home-page-categories/([^/]+)/([^/]+)\.html$ /$1/$2/ [R=301,L]
RewriteRule home-page-categories/(.*\.html)$ /$1 [R=301,L]

或者使用更具体的规则

RewriteRule home-page-categories/(name-1|name-2|name-3|name-4)\.html$ /$1/ [R=301,NC,L]
RewriteRule home-page-categories/(name-1|name-2|name-3|name-4)/([^/]+)\.html$ /$1/$2/ [R=301,L]
RewriteRule home-page-categories/((name-1|name-2|name-3|name-4)/.*\.html)$ /$1 [R=301,L]

答案 1 :(得分:0)

我认为对于你来说,更好的解决方案是在PHP代码中进行这种类型的重写。如果您不知道如何告诉我,我将更新此帖并添加一些示例。