2009-09-14 5 views
41

Dopo una riprogettazione del sito, ho un paio di pagine che devono essere reindirizzate. Tutto sta nello stesso dominio, solo un paio di cose sono state riorganizzate e/o rinominate. Sono di forma:.htaccess 301 reindirizzamento della singola pagina

/contact.php

è ora:

/contact-us.php

Utilizzando il file .htaccess, ho aggiunto questa linea, che è quello che trovo più consigliata:

RedirectMatch 301 /contact.php /contact-us.php 

Questo è per lo più bene - fa il lavoro - il problema è, che reindirizza anche:

0.123.
  • /team1/contact.php
  • /non-existant-folder/contact.php

C'è un modo di specificare che ho solo voglia di reindirizzare la contact.php nella radice?

+0

Dan ura don ... Credo però chiesto molto tempo fa .... – OpenWebWar

risposta

68

RedirectMatch utilizza un'espressione regolare che viene confrontata con il percorso dell'URL. E la tua espressione regolare /contact.php significa solo qualsiasi percorso URL che contiene /contact.php ma non solo qualsiasi percorso URL che sia esattamente /contact.php. Così utilizzare le ancore per l'inizio e la fine della stringa (^ e $):.

RedirectMatch 301 ^/contact\.php$ /contact-us.php 
+0

Grazie, funziona come un fascino. – Dan

+0

Quando faccio questo con qualcosa come www.domain.com/contact.php?location=12 reindirizza a www.domain.com/home/mike/public_html/contact-us.php?location=12 ma solo quando c'è il argomenti lì. – Mike

+1

L'ho risolto inserendo l'URL completo (con http: //) nel lato destinazione in modo tale: "RedirectMatch 301 ^/contact \ .php $ http://www.domain.com/contact-us.php". – Mike

18

Questo dovrebbe farlo

RedirectPermanent /contact.php /contact-us.php 
+0

posso capisco perché questo dovrebbe risolvere il problema 'RedirectPermanent ...' è lo stesso di 'Redirect 301 ...'. – Gumbo

+0

Gumbo, RedirectPermanent accetta (URL-Path) come parametro e RedirectMatch prende (Regex URL), Pertanto quando si utilizza RedirectMatch senza (^) per segnare un inizio di riga non funziona. L'uso di RedirectPermanent è anche molto più veloce delle alternative regex. – duckyflip

+0

@duckyflip: Ah scusa, hai ragione. Mischia il 'RedirectMatch' con solo' Redirect'. Ma 'Redirect' fa solo un controllo prefisso. – Gumbo

0

Si potrebbe anche usare un RewriteRule se si voleva la capacità di template match e URL di reindirizzamento.

+0

Perché è stato votato in ribasso? – Ryall

0

Se si preferisce utilizzare il simplest possible solution di un problema, in alternativa al RedirectMatch è, il più fondamentale, Redirect direttiva

non usa il pattern matching e così è più esplicito e più facile per gli altri a capire.

cioè

<IfModule mod_alias.c> 

#Repoint old contact page to new contact page: 
Redirect 301 /contact.php http://example.com/contact-us.php 

</IfModule> 

stringhe query dovrebbero essere riportati in quanto i documenti dicono:

Ulteriori informazioni sul percorso al di là del percorso-url abbinato sarà allegata alla URL di destinazione.

5
redirect 301 /contact.php /contact-us.php 

non esiste un punto utilizzando la regola RedirectMatch e poi di scrivere il vostro link in modo che siano corrispondenza esatta. Se non includi non devi escludere!Basta usare reindirizzare senza partita e quindi utilizzare i collegamenti normalmente

+0

Semplice è meglio. Se non hai bisogno di un pattern (regex), questa sarebbe la sintassi più efficiente. – jeffkee

-1

Sarà reindirizzare la pagina dello store alla pagina contatti

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    Redirect 301 http://www.youtdomain.com/store http://www.youtdomain.com/contact 
    </IfModule>