2011-06-29 14 views
8

Sé que hay muchos ejemplos en Stackoverflow pero sigo echando de menos algo.htaccess: redirecciona el dominio antiguo y todas las páginas a un nuevo dominio

estoy tratando de redirigir http://old.domain.com/fr/ a http://brand.new-domain.com/fr/ con las siguientes reglas, pero eso no quiere trabajar:

# Enable Rewrite Engine 
RewriteEngine On 
RewriteBase/

# Add a trailing slash to paths without an extension 
RewriteCond %{REQUEST_METHOD} !=POST 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 

# Redirect domain 
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^old.domain.com [OR] 
RewriteCond %{HTTP_HOST} ^other-old.domain.com [NC] 
RewriteRule ^(.*)$ http://brand.new-domain.com/$1 [r=301,L] 

# Remove index.php 
# Uses the "exclude method" 
# http://expressionengine.com/wiki/Remove_index.php_From_URLs/#Exclude_List_Method 
# This method seems to work best for us, you might also use the include method. 
# http://expressionengine.com/wiki/Remove_index.php_From_URLs/#Include_List_Method 
# Exclude root files 
RewriteCond $1 !^(index\.php) [NC] 
# Exclude EE folders 
RewriteCond $1 !^(assets|ee-admin|images|templates|themes|fr|nl)/ [NC] 
# Exclude user created folders 
RewriteCond $1 !^(assets|css|img|js|swf|uploads)/ [NC] 
# Exlude favico, robots, ipad icon 
RewriteCond $1 !^(favicon\.ico|robots\.txt|pple-touch-icon\.png) [NC] 
# Remove index.php 
RewriteCond %{QUERY_STRING} !^(ACT=.*)$ [NC] 
RewriteCond %{QUERY_STRING} !^(URL=.*)$ [NC] 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

correctamente redirigir cuando llamo a la URL raíz, pero no cuando llame a una página. ¿Qué estoy haciendo mal?

¡Gracias de antemano!

Pv

Respuesta

9

Al escribir mod_rewrite reglas, las reglas se aplican en el orden en que aparecen.

Para redirigir un dominio antiguo a un nuevo dominio, usted querrá que la regla sea primero en su archivo .htaccess o httpd.conf — todas las demás reglas deben aparecer después de ella.

Si sólo desea redirigir un directorio determinado, la siguiente regla lo harán, permitiendo al mismo tiempo el resto de la página de Internet funcione con normalidad:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Redirect Only Matching Directories 
    RewriteCond %{REQUEST_URI} ^/(fr|fr/.*)$ 
    RewriteRule ^(.*)$ http://brand.new-domain.com/fr/$1 [R=301,L] 
</IfModule> 

Si desea redirigir todo el sitio, la siguiente regla lo hará:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Redirect Entire Site to New Domain 
    RewriteCond %{HTTP_HOST} ^old.domain.com$ [OR] 
    RewriteCond %{HTTP_HOST} ^other-old.domain.com$ [NC] 
    RewriteRule ^(.*)$ http://brand.new-domain.com/$1 [R=301,L] 
</IfModule> 

Si se preocupan por dejar que los rastreadores sabe que su contenido se ha movido y quiere hacer la transición lo más fluida posible, asegúrese de mantener la bandera i 301 Redirect n la RewriteRule.

Esto asegurará que los usuarios y los motores de búsqueda se dirijan a la página correcta.


Mientras estamos en el tema, como parte de la versión 2.2 EE, EllisLab ahora "oficialmente" ofrece asistencia técnica limitada para removing index.php from ExpressionEngine URLs.

Basta con añadir o actualizar su código a la siguiente, asegurándose de tener en cuenta las reglas que ya tenga en su lugar:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Removes index.php 
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php/$1 [L] 

    # If 404s, "No Input File" or every URL returns the same thing 
    # make it /index.php?/$1 above (add the question mark) 
</IfModule> 
3

intenta utilizar la siguiente ruke como el primero:

# Redirect domain 
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^old.domain.com [OR] 
RewriteCond %{HTTP_HOST} ^other-old.domain.com [NC] 
RewriteRule ^(.*)$ http://brand.new-domain.com/$1 [R=301,L] 

también la mente el caso superior con R es la forma corta de la caja inferior redirect.

1

¿Ha intentado utilizar mod_alias instrucciones de redirección simples (un módulo básico que tienes) , antes de probar el hacky-mod-rewrite?

lo haría un VirtualHost con ServerName old.domain.com y en este VH me gustaría añadir esta regla:

Redirect /fr http://brand.new-domain.com/fr 

de doc:

Entonces, cualquier petición que comienza con rutaDeAccesoUrl volverá una solicitud de redirección al cliente en la ubicación de la URL objetivo. Se agregará información de ruta adicional más allá de la URL-Path coincidente a la URL de destino.

Así que un VirtualHost para brand.new-domain.com (con ServerName brand.new-domain.com) y en éste no establezca la regla de redirección.

Si aún desea manejar los 2 dominios en el mismo VirtualHost, tendrá que usar mod-rewrite ya que incluso RedirectMatch no puede verificar el dominio de solicitud en la consulta.

Cuestiones relacionadas