regex - redirección - redirect 301 de un dominio a otro
Cuál es la diferencia entre RewriteRule y redirigir 301 (3)
Estaba usando algo como esto ...
RewriteRule here/(.*) http://www.there.com/$1 [R=301,L]
pero no pudo hacerlo funcionar
Entonces usé esto ...
redirect 301 /here http://www.there.com
y funcionó bien.
¿Alguien puede explicar la diferencia? ¿Necesitas ambos?
Además ... ¿cómo excluyo las rutas de la redirección?
Me gusta ... redirigir 301 todo ...
redirect 301 /here http://www.there.com
pero
/here/stayhere.html
Gracias
El RewriteRule probablemente no funcionó porque estás diciendo algo ligeramente diferente de lo que eras en la redirección. RewriteRule requiere que la dirección incluya la palabra "aquí", seguida de una barra inclinada. La redirección requiere que la dirección tenga la palabra "aquí" precedida de una barra diagonal. Me gustaría ir con algo como esto:
RewriteRule ^here/?(.*) http://www.there.com/$1 [R=301,L]
¿El agregado ?
hace que la barra sea opcional, y ^
al principio hace que el "aquí" tenga que estar al comienzo de la dirección, no en ningún lugar dentro de ella.
En cuanto a excluir una dirección particular, querrá hacer eso precediendo a RewriteRule con esta línea:
RewriteCond %{REQUEST_URI} !(here/stayhere/.html)
Eso le dice que ignore la regla si está pidiendo específicamente esa dirección.
RewriteRule es manejado por mod_rewrite de Apache , mientras que Red_Act es manejado por mod_alias . No, no necesitas ambos.
Su RewriteRule (que usa regex) no coincidirá /here
(pero coincidirá con rutas como /here/foo.html
) porque está buscando una barra inmediatamente después. Puede hacer que sea opcional usando un signo de interrogación:
RewriteRule ^here(/?.*) http://www.there.com$1 [R=301,L]
Ahora que tendrá el mismo efecto que su redirección. RewriteCond se puede agregar para excluir ciertas rutas:
RewriteCond $0 !/here/stayhere/.html
Tenga en cuenta que algunos servidores no tienen mod_rewrite activado por defecto. Si agregar RewriteEngine on
a su configuración no soluciona el problema y no puede activar mod_rewrite, al menos mod_alias proporciona la directiva RedirectMatch, que puede ser lo suficientemente buena:
RedirectMatch 301 ^/here(?!/stayhere/.html)(/?.*) http://www.there.com$1
Redirect
coincide con los prefijos de ruta. El siguiente Redirect
coincide con cualquier ruta que tenga prefijo (segmento de ruta) es /here
y lo agrega al nuevo URI:
Redirect 301 /here http://example.com
Por lo tanto, cualquier solicitud cuya ruta comience con /here
se redirigirá a http://example.com
wile añadiendo los siguientes sufijos de ruta de /here
a http://example.com
.
En contraste con eso, RewriteRule
funciona con expresiones regulares. En este caso, la siguiente RewriteRule
coincidirá con cualquier ruta que contenga here/
:
RewriteRule here/(.*) http://example.com/$1 [R=301,L]
Todo lo que sigue here/
se agregará a la nueva URL.
Si bien ambas directivas tendrían el mismo efecto al solicitar URL con rutas que comiencen con /here
, la última también coincidirá con cualquier solicitud que contenga la ruta here/
like /not/here/foo
.
Además, solo puedes usar condiciones adicionales con mod_rewrite:
RewriteCond $0 !=here/stayhere.html
RewriteRule ^here(/.*)?$ http://example.com$0 [L,R=301]
Si quisieras hacer lo mismo con mod_alias, necesitarás usar RedirectMatch
con una expresión regular que coincidirá con todo menos /here/stayhere.html
.