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

Apache 复杂301重定向的mod重写规则,apache,mod-rewrite,Apache,Mod Rewrite,因此,我正在做一个有4000个产品和URL的站点,它正在从原来的站点更改,我不想为每个站点制定301规则,所以我做了以下工作来移动类别(下面的示例) 因此,以上内容使主页categories/name-1.html成为一个目录/name-1/-太棒了 # Artist Categories from Root Categories RewriteRule ^(.*)home-page-categories/name-1/(.*)\.html$ name-1/$2/ [R=301,L] Rewri

因此,我正在做一个有4000个产品和URL的站点,它正在从原来的站点更改,我不想为每个站点制定301规则,所以我做了以下工作来移动类别(下面的示例)

因此,以上内容使
主页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]
然后,over抓取次要类别,如
/home page categories/name-1/example.html
,并使其成为
name-1/example/
-太棒了

# 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/product.html
并将其设置为
name-1/example/product.html
,但我认为上面的规则可能与此冲突


关于能够处理这一切的规则有什么想法吗?

为了与您的示例保持一致,解决方案可以是,对于
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]

我认为对您来说,用PHP代码重写这种类型的代码是更好的解决方案。如果你不知道如何告诉我,我会更新这篇文章,并添加一些例子