2009-09-14 12 views
41

Después de rediseñar un sitio, tengo un par de páginas que deben redirigirse. Todo se mantiene en el mismo dominio, solo un par de cosas han sido reorganizadas y/o renombradas. Ellos son de la forma:.htaccess 301 redirección de página única

/contact.php

es ahora:

/contact-us.php

Usando el archivo .htaccess, he añadido esta línea, la cual es el encuentro más recomendada:

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

Esto es sobre todo muy bien - que hace el trabajo - es el problema, sino que también vuelve a dirigir:

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

¿Hay una manera de especificar que sólo desea redirigir la contact.php en la raíz?

+0

Dan ura don ... pero creo que pedí hace mucho mucho tiempo .... – OpenWebWar

Respuesta

68

RedirectMatch usa una expresión regular que coincide con la ruta de la URL. Y su expresión regular /contact.php solo significa cualquier ruta URL que contenga /contact.php pero no solo cualquier ruta URL que sea exactamente /contact.php. A fin de utilizar los anclajes para el inicio y el final de la cadena (^ y $):.

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

Gracias, funciona como un encanto. – Dan

+0

Cuando hago esto con algo como www.domain.com/contact.php?location=12 redirige a www.domain.com/home/mike/public_html/contact-us.php?location=12 pero solo cuando está el argumentos allí. – Mike

+1

Lo arreglé poniendo la URL completa (con http: //) en el lado de destino, así que: "RedirectMatch 301 ^/contact \ .php $ http://www.domain.com/contact-us.php". – Mike

18

Esto debe hacerlo

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

que pueda No veo por qué esto debería resolver el problema. 'RedirectPermanent ...' es lo mismo que 'Redirect 301 ...'. – Gumbo

+0

Gumbo, RedirectPermanent toma (URL-Path) como parámetro y RedirectMatch takes (Regex URL), Por lo tanto, cuando está utilizando RedirectMatch sin (^) para segnificar un inicio de línea, no funciona. Usar RedirectPermanent también es mucho más rápido que las alternativas de expresiones regulares. – duckyflip

+0

@duckyflip: Ah, lo siento, tienes razón. Leyó mal el 'RedirectMatch' con solo' Redirigir'. Pero 'Redirect' solo hace una comprobación de prefijo. – Gumbo

0

También podría utilizar un RewriteRule si quería la capacidad de la plantilla partido y redirigir las direcciones URL.

+0

¿Por qué se votó a favor? – Ryall

0

Si prefiere utilizar el simplest possible solution a un problema, una alternativa a RedirectMatch es decir, la más básica, Redirect Directiva

no utiliza la coincidencia de patrones y así es más explícito y más fácil de entender para los demás.

es decir

<IfModule mod_alias.c> 

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

</IfModule> 

Las cadenas de consulta, deben transferirse debido a que los documentos dicen:

información de la ruta adicional más allá de la URL de la ruta será emparejado anexa a la URL de destino.

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

no hay un punto usando la regla RedirectMatch y luego tener que escribir sus enlaces por lo que son una coincidencia exacta. Si no incluye, ¡no tiene que excluir!Sólo tiene que utilizar redirigir sin partido y luego utilizar los enlaces normalmente

+0

Simple es mejor. Si no necesita un patrón (regex), esta sería la sintaxis más eficiente. – jeffkee

-1

Será redirigir su página de la tienda de su página de contacto

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