PHP - .htacces escribir 2 Rewriterule ^ ¿es posible?

 
Vista:
sin imagen de perfil
Val: 34
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

.htacces escribir 2 Rewriterule ^ ¿es posible?

Publicado por Juan Carlos (19 intervenciones) el 29/11/2018 20:49:50
Buenas noches.

tengo el siguiente código en mi .htacces

1
2
3
4
5
6
RewriteEngine on
 
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
 
Rewriterule ^(.+)$ detalle_articulo.php?Id_catalogo=$1&Seo=$2

Funciona correctamente. Hasta aquí todo bien, pero estoy intentando en el mismo .htacces tener 2 Rewriterule ^ es decir algo como así:

1
2
3
4
5
6
7
8
RewriteEngine on
 
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
 
Rewriterule ^(.+)$ detalle_articulo.php?Id_catalogo=$1&Seo=$2
 
Rewriterule ^blog/(.+)$ blog_detalle.php?Id_noticia=$1&Seo=$2

El caso es que así solo me funciona el primer Rewriterule ^

¿Alguna idea de como solucionarlo??

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de abzer0x
Val: 575
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

.htacces escribir 2 Rewriterule ^ ¿es posible?

Publicado por abzer0x (157 intervenciones) el 29/11/2018 21:52:46
Hola, no estoy del todo seguro, pero me parece que la cuestión es que siempre coincide con la primera regla ya que en la expresión regular le indicas que inicie y finalice con cualquier carácter al menos una vez
1
^(.+)$
, por lo que esta debería ser la última de tus reglas.
1
2
3
4
5
6
RewriteEngine on
	RewriteCond %{SCRIPT_FILENAME} !-d
	RewriteCond %{SCRIPT_FILENAME} !-f
 
    Rewriterule ^blog/(.+)$ blog_detalle.php?Id_noticia=$1&Seo=$2
	Rewriterule ^(.+)$ detalle_articulo.php?Id_catalogo=$1&Seo=$2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 34
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

.htacces escribir 2 Rewriterule ^ ¿es posible?

Publicado por Juan Carlos (19 intervenciones) el 30/11/2018 08:12:09
Hola abzer0x, gracias por tu respuesta. De la forma que indicas ya había probado y no funciona... No se me ocurre como plantearlo...
Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 34
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

.htacces escribir 2 Rewriterule ^ ¿es posible?

Publicado por Juan Carlos (19 intervenciones) el 30/11/2018 11:39:39
Al final he encontrado algo que me ha servido. lo pongo aquí por si alguien se encuentra con el mismo problema.
1
2
3
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ detalle_articulo.php?Seo=$1
RewriteRule ^blog/(.+)$ blog_detalle.php?Seo=$1
Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de abzer0x
Val: 575
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

.htacces escribir 2 Rewriterule ^ ¿es posible?

Publicado por abzer0x (157 intervenciones) el 30/11/2018 22:02:30
Hola Jun Carlos, gracias por compartir la respuesta.
Pero creo que ya se cual era el problema, a mi respuesta anterior, y es que en apache existe el flag (bandera) [L] el cual en pocas palabras permite que en caso de coincidir la regla deje de evaluar las demás. Existen muchas flags, otro importante es QSA (query string append) el permite que se mantengan los parámetros enviados por url.

[L] | Last
"The [L] flag causes mod_rewrite to stop processing the rule set. In most contexts, this means that if the rule matches, no further rules will be processed"

Puede ser que la solución sea esta.
1
2
3
4
5
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
Rewriterule ^blog/(.+)$ blog_detalle.php?Id_noticia=$1&Seo=$2 [L]
Rewriterule ^(.+)$ detalle_articulo.php?Id_catalogo=$1&Seo=$2

Documentación de apache
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 34
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

.htacces escribir 2 Rewriterule ^ ¿es posible?

Publicado por Juan Carlos (19 intervenciones) el 01/12/2018 14:51:26
Hola abzer0x buenos días,

Pues con la última solución que indicas, lo he probado y no funciona (se me queda en la página index e intenta mostrar un artículo).

Como funciona correctamente es con el siguiente código:
1
2
3
4
5
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)$ detalle_articulo.php?Seo=$1
RewriteRule ^blog/(.+)$ blog_detalle.php?Seo=$1

Mucíiiisimas gracias por tu interés y la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar