2014-10-12 12 views
5

Ho un numero di URL che devo reindirizzare a nuove posizioni, ma ci sono alcune situazioni in cui le pagine figlio devono rimanere attive e non reindirizzate. Per esempio:.htaccess reindirizza per genitore ma non per figli?

/products sarebbe reindirizzare a http://www.newsite.com/products

/products/category1 sarebbe reindirizzare a http://www.newsite/products/category1

Ma/products/specialitem non si sarebbe reindirizzato a tutti.

Ciò è possibile con Redirect o RedirectMatch?

Facendo un Redirect 301 /products http://www.newsite.com/products sembra interessare tutte le pagine figlio

Grazie per aver alcuna guida!

Edit:

Utilizzando la risposta di waynethec, sono stato in grado di iniziare. Ma qualcuno può chiarire perché la mia prima regola qui sotto funziona, ma gli altri no?

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/

(non lavorando, voglio dire che posso ancora raggiungere le pagine, piuttosto che ottenere reindirizzati.)

+0

Benvenuti nel mondo di 'mod_rewrite')) Naturalmente, è possibile farlo con RedirectMatch, ma se il numero di requisiti aumenta -?! Interruttore per RewriteRules ..' RedirectMatch 301 ^/prodotti (/ specialitem) http: // www.newsite.com/products' Non è stato controllato. – Cheery

risposta

2

Dovresti essere in grado di utilizzare la seguente regola di RedirectMatch:

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

Si noti che questo reindirizzerà solo le richieste per/prodotti, non/prodotti/o /products/pagename.extension.

+0

Questo è veramente utile, ma cosa succede se ho più segmenti nel mio URL? Ad esempio: '/ category1/subcat1' reindirizza a' http: // newsite.com/products' '/ category1/subcat1/product1/details /' reindirizza a 'http://newsite.com/products/ somepage' '/ category1/subcat1/product2/details2 /' reindirizza a 'http: // newsite.it/products/somepage2' '/ category1/subcat2/foo/bar /' reindirizza a 'http: // newsite.com/products/lorem/ipsum' – clorentzen

+0

Forse questo fa meglio la mia domanda di follow-up: Perché il la prima regola sotto funziona per me, ma quelle successive no? 'RedirectMatch 301^segmento-one $ http: // www.google.com /' ' RedirectMatch 301^segmento-one/segmento-due $ 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/' – clorentzen

+0

La sintassi che hai fornito è valida e dovrebbe funzionare come ti aspetti. Hai altre regole in .htaccess? – waynethec

0

È possibile utilizzare RedirectMatch:

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

Questo reindirizzerà /products, o qualcosa dopo, se non /products/specialitem/

0

Se avete bisogno di aggiungere condizioni, anche questo ha lavorato per me. Nota, ho dovuto eliminare la barra tra ^ e products quando si utilizza 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] 
Problemi correlati