Foros del Web » Administración de Sistemas » Apache »

[SOLUCIONADO] Conflicto de dos reglas en .htaccess

Estas en el tema de Conflicto de dos reglas en .htaccess en el foro de Apache en Foros del Web. Hola amig@s, Tengo un problema con un .htaccess, lo que pretendo es ocultar la extensión del archivo (en este caso .php) por hacerla más corta ...
  #1 (permalink)  
Antiguo 30/12/2013, 08:18
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Conflicto de dos reglas en .htaccess

Hola amig@s,

Tengo un problema con un .htaccess, lo que pretendo es ocultar la extensión del archivo (en este caso .php) por hacerla más corta y fácil de cambiar si fuera el caso, pero además, pretendo redirigir si acceden sin www, al dominio con www, el código que tengo es el siguiente:

Código .htaccess:
Ver original
  1. RewriteEngine on
  2.  
  3. #Quitar extensión .php
  4. RewriteCond %{REQUEST_FILENAME} !-d
  5. RewriteCond %{REQUEST_FILENAME}\.php -f
  6. RewriteRule ^(.*)$ $1.php
  7.  
  8. #Forzar a que siempre se incluya www al acceder al sitio
  9. RewriteCond %{HTTP_HOST} ^dominio\.com$ [NC]
  10. RewriteRule ^(.*)/?$ http://www.dominio.com/$1 [L,R=301]
  11.  
  12. #Aquí tengo la gestión de las páginas de error pero no lo pongo que ocupa mucho.

El problema está en que, si accedes sin www, añade la extensión al archivo además de las www, así:

dominio.com/pagina redirige a www.dominio.com/pagina.php

Lo que debería hacer es:

dominio.com/pagina redirige a www.dominio.com/pagina

Agradecería mucho si alguien me pudiera echar un cable explicándome qué error tengo y cómo resolverlo.

Añado que no consigo acabar de aclararme con los .htaccess, me voy defendiendo pero no termino de entenderlos, más que nada también por las expresiones regulares que por más que las estudio, no acabo de entenderlas.

Ya sé que hay varios post aquí sobre las expresiones regulares y os aseguro que los he leído y releído un montón de veces, pero debe de ser que tengo la cabeza muy dura...

Bueno, espero que alguien me pueda echar un cable.

Muchas gracias por adelantado.

Última edición por rbczgz; 30/12/2013 a las 09:38 Razón: Faltaba información de lo que hace el código
  #2 (permalink)  
Antiguo 31/12/2013, 01:30
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Respuesta: Conflicto de dos reglas en .htaccess

Hola de nuevo,

Sé que son malas fechas, por cierto, Muy Feliz Año Nuevo a tod@s, pero ¿no hay nadie que pueda echarme una mano?

Espero que sí, ya que tengo eso ahí colgado a medias y me gustaría poder acabarlo, pero sobre todo, aprender a hacerlo.

Muchas gracias.
  #3 (permalink)  
Antiguo 31/12/2013, 08:00
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Respuesta: Conflicto de dos reglas en .htaccess

Hola de nuevo,

Bueno, al final lo he resuelto a base de buscar y probar, el resultado es el que coloco más abajo, es decir, el código del .htaccess que realiza lo siguiente:
  • Redirige al usuario que accede sin www al dominio con www (dominio.com -> www.dominio.com)
  • Quita la extensión de las páginas, de forma que en un momento dado, se pueden cambiar sin tener que modificar los enlaces que se hayan colocado donde sea.

Aquí el código, como se puede ver, solo era necesario quitar /? en la regla RewriteRule ^(.*)$ http://www.dominio.com/$1 [L,R=301]:

Código .htaccess:
Ver original
  1. RewriteEngine on
  2.  
  3. #Forzar a que siempre se incluya www al acceder al sitio
  4. RewriteCond %{HTTP_HOST} ^dominio\.com$ [NC]
  5. RewriteRule ^(.*)$ http://www.dominio.com/$1 [L,R=301]
  6.  
  7. #Quitar extensión .php
  8. RewriteCond %{REQUEST_FILENAME} !-d
  9. RewriteCond %{REQUEST_FILENAME}\.php -f
  10. RewriteRule ^(.*)$ $1.php [L,QSA]

Bueno, ahí lo dejo por si le sirve a alguien, y marco el tema como solucionado.

Etiquetas: conflicto, dominio, htaccess, php, reglas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:02.