2014-10-12 24 views
5

Mam wiele adresów URL, które muszę przekierować do nowych lokalizacji, ale istnieją sytuacje, w których strony podrzędne muszą pozostać aktywne, a nie przekierowane. Na przykład:. Przekierowanie htaccess dla rodzica, ale nie dla dzieci?

/products będzie przekierowywać do http://www.newsite.com/products

/products/category1 będzie przekierowywać do http://www.newsite/products/category1

Ale/products/specialitem nie będzie przekierowany na wszystko.

Czy jest to możliwe z przekierowaniem lub przekierowaniem?

Wykonanie operacji Redirect 301 /products http://www.newsite.com/products wydaje się dotyczyć wszystkich stron podrzędnych

Dzięki za wszelkie wskazówki!

Edit:

Korzystanie odpowiedź waynethec jest, byłem w stanie zacząć. Ale czy ktoś może wyjaśnić, dlaczego moja pierwsza zasada poniżej działa, a inne nie?

RedirectMatch 301 ^segment-one$ http://www.google.com/

RedirectMatch 301 ^segment-one/segment-two$ http://news.google.com/

RedirectMatch 301 ^segment-one/segment-two/segment-three$ http://cnn.com/

RedirectMatch 301 ^segment-one/segment-two/segment-three/foobar$ http://gbv.com/

(By nie działa, to znaczy, że wciąż mogą uzyskać na stronach, zamiast im uzyskiwanie przekierowany.)

+0

Witamy w świecie 'mod_rewrite')) Oczywiście, można to zrobić z RedirectMatch, ale jeśli szereg wymogów - wzrost? Przełącznik RewriteRules ..' RedirectMatch 301 ^/produktów (/ specialitem) http: // www.newsite.com/products' Nie sprawdzono jednak. – Cheery

Odpowiedz

2

Powinieneś mieć możliwość użycia następującej reguły RedirectMatch:

RedirectMatch 301 ^/products$ http://www.newsite.com/products 

Należy zauważyć, że spowoduje to przekierowanie wyłącznie żądań dotyczących produktów/produktów, a nie/produktów/lub/produktów/nazw stron.rozszerzenie.

+0

To jest naprawdę pomocne, ale co zrobić, jeśli mam więcej segmentów w moim adresie URL? Na przykład: '/ category1/subcat1' przekierowuje do' http: // newsite.com/products' '/ category1/subcat1/product1/details /' przekierowuje do 'http://newsite.com/products/ somepage' '/ category1/subcat1/product2/details2 /' przekierowuje do 'http: // newsite.com/products/somepage2' '/ category1/subcat2/foo/bar /' przekierowuje do 'http: // newsite.com/products/lorem/ipsum' – clorentzen

+0

Może to lepiej zadaje moje następne pytanie: Dlaczego pierwsza zasada poniżej działa dla mnie, ale kolejne nie działają? 'RedirectMatch 301^segment-jeden $ http: // www.google.com /' 'RedirectMatch 301^segment-jeden/segment-dwa $ http: // news.google.com /' 'RedirectMatch 301^segment-jeden/segment-dwa/segment-trzy $ http: // cnn.com/' ' RedirectMatch 301^segment-jeden/segment-dwa/segment-trzy/foobar $ http: // gbv.com/' – clorentzen

+0

Podana składnia jest poprawna i powinna działać zgodnie z oczekiwaniami. Czy masz jakieś inne reguły w .htaccess? – waynethec

0

Można użyć RedirectMatch:

RedirectMatch 301 ^/products(?!/specialitem)(.*)$ http://www.newsite.com/products$1 

To przekieruje /products, ani nic po nim, z wyjątkiem /products/specialitem/

0

Jeśli chcesz dodać warunki, to pracował również dla mnie. Zauważ, musiałem wyeliminować ukośnik między ^ i products podczas korzystania z RewriteRule.

RewriteCond [...whatever your conditions are...] 

# test with 302 first to avoid annoying caching issues 
# RewriteRule ^products$ http://www.newsite.com/products [R=302,NC,L] 

# but use 301 in production once you know it's working 
RewriteRule ^products$ http://www.newsite.com/products [R=301,NC,L]