entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

URL "amigables" desde .htaccess con varias reglas

La duda es la siguiente: Tengo en mi htaccess lo siguiente:

<IfModule mod_rewrite.c>
RewriteEngine ON
RewriteCond %{QUERY_STRING}  !\?seccion=
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
# If the request is not for a valid link
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ /?seccion=$1 [L]
</IfModule>

Lo que hace esto es entender urls amigables, como ya se explico de donde viene esta pregunta.

Ahora la siguiente duda es que quiero añadir una nueva regla, es decir, que entienda las siguiente urls: http://midominio.com/miseccion/pagina/2, que cuando le mande por url esa estructura la sepa entender el servidor.

Ahora mismo entiende esto: http://midominio.com/miseccion&pg=2

1 Respuesta

2votos

carlossevi Puntos63580

Tras unas cuentas pruebas creo que he dado con la solución:

<IfModule mod_rewrite.c>
RewriteEngine ON
RewriteCond %{QUERY_STRING}  !\?seccion=
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
# If the request is not for a valid link
RewriteCond %{REQUEST_FILENAME} !-l
# REGLAS:
# Para //dominio.com/misec/pagina/2 > //dominio.com/?seccion=misec&pg=2
RewriteRule ^(\w+)/pagina/(\w+)/?$ /?seccion=$1&pg=$2 [L]
# Para //dominio.com/misec > //dominio.com/?seccion=misec
RewriteRule ^(\w+)/?$ /?seccion=$1 [L]
</IfModule>

Importante el cambio de (.+) por (\w+) que sustituye el "any character" por "any word character".

Muy importante: siempre debe ponerse la regla más compleja arriba, seguida por el [L] que significa que no se sigan comprobando más reglas si esa se cumple.

0voto

danielreales7 comentado

Ah y esto:

 Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://www.midominio.com/miseccion/pagina/bootstrap/css/bootstrap.min.css".

Con más archivos css y javascript

1voto

white comentado

el problema viene del htaccess en: RewriteRule ^(\w+)/pagina/(\w+)/?$ /?seccion=$1&pg=$2 [L]

talvez con una expresion regular diferente podria funcionar: RewriteRule ^([a-zA-Z0-9]+)/pagina/([0-9]+)/?$ /?seccion=$1&pg=$2 [L]

EDIT: no vi tu ruta, olvida lo que dije C:

0voto

carlossevi comentado

Al enlace al css le sobra el punto . delante de la barra /.
Debes sustituir:

<link rel="stylesheet" type="text/css" href="./bootstrap/css/bootstrap.min.css">

Por:

<link rel="stylesheet" type="text/css" href="/bootstrap/css/bootstrap.min.css">

Cuando el enlace empieza por / indica que la ruta es a partir del nombre del dominio.

0voto

danielreales7 comentado

Al hacer eso me ha recuperado los estilos, pero me acabo de fijar que en vez de ir a la página 2 lo que hace es mostrarme el index de la web.

0voto

carlossevi comentado

Con las reglas de arriba puedes comprobar en este servicio de test online que la petición http://midominio/misec/pagina/2 es traducida por http://midominio/?seccion=misec&pg=2.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta