2012-05-15 2 views
1

Итак, я занимаюсь сайтом с около 4000 продуктами, и URL-адреса меняются от старого сайта и не приносят 301 правила для каждого из них, поэтому я сделал следующее, чтобы переместить категории (примеры ниже)mod rewrite rule for complex 301 redirects

# 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, но правило выше, я думаю, что может конфликтовать с этим.

Любые идеи о правиле, которые могут справиться с этим?

ответ

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] 
0

Я думаю, что для вас лучше solut чтобы сделать этот тип перезаписи в PHP-коде. Если вы не знаете, как мне сказать, и я обновлю это сообщение и добавлю несколько примеров.