Paginación y htaccess

eXtreM3

Hola! Tengo un problemilla. Estoy mostrando en una pagina php unas noticias sacadas de una base de datos, que se llama blog.php

Haciendo la web con urls amigables del tipo

  • miweb.com/portfolio
  • miweb.com/contacto
  • miweb.com/noticia/15/mi-noticia-con-url-amigable
    ...
    etc

me surge el problemilla aquí, mostrando las noticias principales SIN paginación, es decir, igual que para las anteriores que he nombrado, para el blog.php en mi htaccess tengo este codigo

RewriteRule ^blog blog.php

ahora viene el problema, para paginar tengo los tipicos botoncitos anterior y siguiente, que al darles yo quiero que muestre la url así

miweb.com/blog/1
miweb.com/blog/7
...
etc

Si pongo esta regla en el htaccess

RewriteRule ^blog/(.*)$ blog.php?pagina=$1

pasa de mi y no lo hace, no interpreta el parámetro "pagina", hago un echo $_GET['pagina'] y no saca nada, por lo tanto la paginación no funciona.

Si elimino la linea RewriteRule blog blog.php y dejo la otra, sí que funciona la paginación, así que la solución debe estar ahí, poner algún comando extra en una de las lineas del htaccess quizás...

Resumiendo: cuando entro al blog, la url debe verse asi "miweb.com/blog" y cuando hago paginación así "miweb.com/blog/x"

Gracias!

eXtreM3

xDDDDDDDDDDDDD impresionante, juro por lo más sagrao que llevaba casi 2 horas con esto, probrando directrices que conozco, googleando, foreando...

ha sido postear... y tachán!!

RewriteRule ^blog$ blog.php
RewriteRule ^blog/(.*)$ blog.php?ultimas=$1

todo por un $ :¬¬: xD

1 respuesta
SeiYa

#2 en realidad juraría que es por jerarquía. Es decir, va de arriba a abajo, si cuadra una condición coge esa y no sigue.

Es decir, tu blog no significa más que eso, que empiece por blog, cierto qeu con el $ cierras la cadena, pero también lo habrías solucionado poniendo las rutas más complejas al comienzo y dejando las más simples y generales para el final.

1 respuesta
Kaos

#3 para eso tendría que ser así:

RewriteRule ^blog$ blog.php [L]
RewriteRule ^blog/(.*)$ blog.php?ultimas=$1 [L]

En ese caso cuando encuentre la 1ª línea parará.
No es el caso pero es lo aconsejable.

SeiYa

Si pero lo más aconsejable no sería que en primer lugar estuviesen las más particulares?

Quiero decir, en tu ejemplo da igual porque está delimitado inicio y fin de la cadena de la regexp pero ¿no sería ya más aconsejable de paso cambiar el orden y poner al principio las más "restrictivas" por así decirlo?

eXtreM3

Lleva razón SeiYa, después de eso tuve que hacer algo similar, os cuento el caso. Tenía que hacer una paginación, de las noticias según su categoría, de manera que si por ejemplo entrabas a ver la categoria "motor", la url quedaría así

miweb.com/categoria/motor

ahora si paginabas, la url debería ir quedando así

miweb.com/categoria/motor/1
miweb.com/categoria/motor/2
etc

No me salía poniendo primero la regla "general" y después la particular, simplemente por probar puse como dijo SeiYa, primero el caso particular y después el otro, y funcionó, quedando el htaccess así

RewriteRule ^categoria/(.*)/(.*)$ categoria.php?slug=$1&ultimas=$2
RewriteRule ^categoria/(.*)$ categoria.php?slug=$1

Así que gracias ^^ Me sirvió tu ayuda ;)

edit: para qué sirve poner el [L] al final de una linea en el htaccess?

Kaos

Para que pare de leer. Es aconsejable usarlo. Llega a la línea y no sigue.

Usuarios habituales

  • Kaos
  • eXtreM3
  • SeiYa