Ayuda, .htaccess paginacion de index

  • Autor Autor dondominios
  • Fecha de inicio Fecha de inicio
dondominios

dondominios

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
Bueno luego de pasar muchas horas intentando soliconarlo he decidido pedir ayudar en el foro.

Tengo una web que en el index tiene una paginacion que al pasar a la pagina nuemero 2 me lleva al 404 algo estoy haciendo mal.

A ver si alguien puede ayudar o decirme como lo soluciono.
cambiar la url de

dominio.com/index.php?t=&page=2
a
dominio.com/index/2

2z3nucn.webp

en mi .htaccess agrege lo siguiente

RewriteRule ^index/([^/]+)\/?$ index.php?p=$1
RewriteRule ^index/([^/]+)\/([0-9]+)$ index.php?t=$1&p=$2 [L]

y en mi index php

// Get number of pages
$numrows = mysql_num_rows($result);
$offset = ($page - 1) * $filesperpage;
$pagescount = ceil($numrows/$filesperpage);

for ($pagen = 1; $pagen <= $pagescount; $pagen++) {
if ($pagen == $page) {
$nav .= " <b>$pagen</b>";
} else {
if ($pagen >= $page - 5 && $pagen <= $page + 18) {
$nav .= " <a href=\"".$siteurl."/index/".$pagen."\">$pagen</a>";
}
}
}
if ($page > 1) {
$pagen = $page - 1;
$prev = "<a href=\"".$siteurl."/index/"."/1\"><<</a> <a href=\"".$siteurl."/index/".$pagen."\"><</a>";
} else {
$prev = "<a href=\"".$siteurl."/index/"."&page=1\"><<</a> <a href=\"".$siteurl."/index/".$pagen."\"><</a>";
}
if ($page < $pagescount) {
$pagen = $page + 1;
$next = " <a href=\"".$siteurl."/index/"."&page=".$pagen."\">></a> <a href=\"".$siteurl."/index/".$pagescount."\">>></a>";
} else {
$next = "<a href=\"".$siteurl."/index/".$pagen."\">></a> <a href=\"".$siteurl."/index/"."&page=".$pagescount."\">>></a>";
}

Una parte he logrado que funcione que sea

dominio.com/index/2 en ves de dominio.com/index.php?t=&page=2

Pero cuando paso a la pagina 2 me lleva al error 404
 
Última edición:
En el .htaccess prueba cambiando lo que pusistes por:
Insertar CODE, HTML o PHP:
RewriteRule ^index/([0-9]+)?$ index.php?p=$1 [QSA,L]
RewriteRule ^index/([^/]+)\/([0-9]+)$ index.php?t=$1&p=$2 [QSA,L]

Acuerdate tambien de escribir antes de eso:
Insertar CODE, HTML o PHP:
RewriteEngine On

Saludos 🙂
 
En el .htaccess prueba cambiando lo que pusistes por:
Insertar CODE, HTML o PHP:
RewriteRule ^index/([0-9]+)?$ index.php?p=$1 [QSA,L]
RewriteRule ^index/([^/]+)\/([0-9]+)$ index.php?t=$1&p=$2 [QSA,L]

Acuerdate tambien de escribir antes de eso:
Insertar CODE, HTML o PHP:
RewriteEngine On

Saludos 🙂

Continua el error !!! Muchas Gracias por responder aperpen
 
Probé el código en mi localhost con el .htaccess:
Insertar CODE, HTML o PHP:
RewriteEngine On
RewriteRule ^index/([0-9]+)?$ index.php?p=$1 [QSA,L]
RewriteRule ^index/([^/]+)\/([0-9]+)$ index.php?t=$1&p=$2 [QSA,L]

Y al PHP le hice un arreglo para que funcionara sin BD y lo dejé asi:
PHP:
<?php
// Get number of pages
$page = $_GET['p'];
$siteurl = 'http://localhost';
$numrows = 50;
$filesperpage = 10;
$offset = ($page - 1) * $filesperpage;
$pagescount = ceil($numrows/$filesperpage);
$nav;
for ($pagen = 1; $pagen <= $pagescount; $pagen++) {
if ($pagen == $page) {
$nav .= " <b>$pagen</b>";
} else {
if ($pagen >= $page - 5 && $pagen <= $page + 18) {
$nav .= " <a href=\"".$siteurl."/index/".$pagen."\">$pagen</a>";
}
}
}
if ($page > 1) {
$pagen = $page - 1;
$prev = "<a href=\"".$siteurl."/index/"."/1\"><<</a> <a href=\"".$siteurl."/index/".$pagen."\"><</a>";
} else {
$prev = "<a href=\"".$siteurl."/index/"."&page=1\"><<</a> <a href=\"".$siteurl."/index/".$pagen."\"><</a>";
}
if ($page < $pagescount) {
$pagen = $page + 1;
$next = " <a href=\"".$siteurl."/index/"."&page=".$pagen."\">></a> <a href=\"".$siteurl."/index/".$pagescount."\">>></a>";
} else {
$next = "<a href=\"".$siteurl."/index/".$pagen."\">></a> <a href=\"".$siteurl."/index/"."&page=".$pagescount."\">>></a>";
}

echo $nav;

y bueno este fue el resultado:
- htt*p://localhost/index.php
826b6884c5.webp

- htt*p://localhost/index/2
1ec994c8e6.webp

- htt*p://localhost/index/estoserialavariablegett/2
8a6d4c2290.webp

Entonces supongo que no nos entendimos bien 😛 ¿Donde te da el problema?

Saludos 🙂

- - - Actualizado - - -

Si, amigo ya veo el error. En el .httacess pusiste:
RewriteRule ^index/([^/]+)\/?$ index.php?p=$1
RewriteRule ^index/([^/]+)\/([0-9]+)$ index.php?t=$1&p=$2 [L]

Pero indicas que la URL sería:
dominio.com/index.php?t=&page=2

Entonces el .htaccess tendría que quedar:
Insertar CODE, HTML o PHP:
RewriteEngine On
RewriteRule ^index/([0-9]+)?$ index.php?page=$1 [QSA,L]
RewriteRule ^index/([^/]+)\/([0-9]+)$ index.php?t=$1&page=$2 [QSA,L]

Un saludo 🙂
 
Última edición:
No no funciona igual muchas gracias por tu tiempo... :encouragement:
 
En tú .htaccess puedes poner:

Insertar CODE, HTML o PHP:
RewriteRule ^index/$(.*)$ index.php?p=$1 [L,NC]
RewriteRule ^index/$(.*)/$ index.php?p=$1 [L,NC]


Edita la ruta: index.php?p=$1 por la que estes utilizando. un saludo
 
Sige sin funcionar sera que tendre que agregar algo en el functions.php ? En las categorias funciona de la siguiente manera

dominio.com/seccion/1/categoria

Categoria php

HTML:
// Get number of pages
		$numrows = mysql_num_rows($result);
		$offset = ($page - 1) * $filesperpage;
		$pagescount = ceil($numrows/$filesperpage);
		
		for ($pagen = 1; $pagen <= $pagescount; $pagen++) {
			if ($pagen == $page) {
				$nav .= " <b>$pagen</b>";
            } else {
                if ($pagen >= $page - 5 && $pagen <= $page + 5) {
				    if ($sefriendly == '1') {
					    $nav .= " <a href=\"".categoryurl($categoryId,$categoryname)."/".$pagen.".html\">".$pagen."</a>";
					} else {
					    $nav .= " <a href=\"".categoryurl($categoryId,$categoryname)."&page=".$pagen."\">".$pagen."</a>";
					}
			    }
	        } 
        }
        if ($page > 1) {
	        $pagen = $page - 1;
	        if ($sefriendly == '1') {
		        $prev = "<a href=\"".categoryurl($categoryId,$categoryname)."/1.html\"><<</a> <a href=\"".categoryurl($categoryId,$categoryname)."/".$pagen.".html\"><</a>";
		    } else {
			    $prev = "<a href=\"".categoryurl($categoryId,$categoryname)."&page=1\"><<</a> <a href=\"".categoryurl($categoryId,$categoryname)."&page=".$pagen."\"><</a>";
			}
	    } else {
		    $prev  = "";
		}
		if ($page < $pagescount) {
			$pagen = $page + 1;
			if ($sefriendly == '1') {
		        $next = " <a href=\"".categoryurl($categoryId,$categoryname)."/".$pagen.".html\">></a> <a href=\"".categoryurl($categoryId,$categoryname)."/".$pagescount.".html\">>></a>";
		    } else {
			    $next = " <a href=\"".categoryurl($categoryId,$categoryname)."&page=".$pagen."\">></a> <a href=\"".categoryurl($categoryId,$categoryname)."&page=".$pagescount."\">>></a>";
			}
		} else {
			$next = "";
		}
    // Display page numbers
    if ($pagescount > '1') {
            echo "<tr><td colspan='3' class='pagenumbers'>".$prev.$nav.$next."</td></tr>";
    }

y en functions.php

HTML:
function categoryurl($categoryId,$categoryname) {
	global $siteurl, $sefriendly;
	if ($sefriendly == '1') {
		$categoryname = str_replace(" ","-",$categoryname);
        $categoryname = str_replace("'","_",$categoryname);
        $categoryname = str_replace("ä","a",$categoryname);
        $categoryname = str_replace("ö","o",$categoryname);
        $categoryname = str_replace("ü","y",$categoryname);
        $categoryurl = $siteurl."/categoria/".$categoryId."/".$categoryname;
    } else {
	    $categoryurl = $siteurl."/browse.php?c=".$categoryId;
    }
	return $categoryurl;
}

Tendre que agregar algo en el functions para que funcione

- - - Actualizado - - -

Gracias Daniel pero el problema persiste!


En tú .htaccess puedes poner:

Insertar CODE, HTML o PHP:
RewriteRule ^index/$(.*)$ index.php?p=$1 [L,NC]
RewriteRule ^index/$(.*)/$ index.php?p=$1 [L,NC]


Edita la ruta: index.php?p=$1 por la que estes utilizando. un saludo
 
Última edición:
En el .htaccess estás re-escribiendo index.php. En tus archivos .php estás estableciendo el enlace a browse.php. Pienso que el problema está ahí.

A ésto me refiero:

PHP:
browse.php?c=
index.php?p=
 
El browser es de las categorias (el codigo de arriba) donde funciona bien en cambio en el index es donde no logro que funcione

En el .htaccess estás re-escribiendo index.php. En tus archivos .php estás estableciendo el enlace a browse.php. Pienso que el problema está ahí.

A ésto me refiero:

PHP:
browse.php?c=
index.php?p=

- - - Actualizado - - -

Lo que tengo hasta el momento que no ha funcionado es

Index.php

HTML:
<?php
 
session_start();

include ("includes/config.php");

$page = $_GET[page];
if (empty($page) || !is_numeric($page)) {
	$page = "1";
}
$searchTerm = $_GET[t];
if (empty($searchTerm)) {
  $searchTerm = $_POST[t];
}
    
// Display games
function searchgames($page,$searchTerm) {
	global $siteurl, $filesperpage, $sefriendly;
	$result = mysql_query("SELECT * FROM files WHERE title LIKE '%$searchTerm%' && status ='1' || description LIKE '%$searchTerm%' && status ='1'");
	if (mysql_num_rows($result) == '0') {
		echo "No games found";
	} else {
		
		// Get number of pages
		$numrows = mysql_num_rows($result);
		$offset = ($page - 1) * $filesperpage;
		$pagescount = ceil($numrows/$filesperpage);
		
		for ($pagen = 1; $pagen <= $pagescount; $pagen++) {
			if ($pagen == $page) {
				$nav .= " <b>$pagen</b>";
            } else {
                if ($pagen >= $page - 5 && $pagen <= $page + 18) {
$nav .= " <a href=\"".$siteurl."/index/".$pagen."\">$pagen</a>";
}
}
}
if ($page > 1) {
$pagen = $page - 1;
$prev = "<a href=\"".$siteurl."/index/"."/1\"><<</a> <a href=\"".$siteurl."/index/".$pagen."\"><</a>";
} else {
$prev = "<a href=\"".$siteurl."/index/"."&page=1\"><<</a> <a href=\"".$siteurl."/index/".$pagen."\"><</a>";
}
if ($page < $pagescount) {
$pagen = $page + 1;
$next = " <a href=\"".$siteurl."/index/"."&page=".$pagen."\">></a> <a href=\"".$siteurl."/index/".$pagescount."\">>></a>";
} else {
$next = "<a href=\"".$siteurl."/index/".$pagen."\">></a> <a href=\"".$siteurl."/index/"."&page=".$pagescount."\">>></a>";
}

.htaccess

HTML:
RewriteRule ^index/([0-9]+)?$ index.php?page=$1 [L]
RewriteRule ^index/([^/]+)\/([0-9]+)$ index.php?t=$1&page=$2 [L]

Esto no me ha funcionado si alguien me puede ayudar se agradece por skype por MP o Gtalk o si ve el error aqui se agradece en verdad !!!
 
Última edición:
Has un echo de t y page.

PHP:
echo 'page: ' . $_GET["page"] . 't: ' . $_GET["t"];

Para ver si toma los datos correctamente, o para ver qué toma.
 
Lo que sugieres es cambiar

HTML:
$page = $_GET[page];
x
HTML:
$page = $_GET[t];

y

RewriteRule ^index/([0-9]+)?$ index.php?page=$1 [L]
RewriteRule ^index/([^/]+)\/([0-9]+)$ index.php?t=$1&page=$2 [L]

Lo he cambiado y tampoco funciona
 
No, lo que quise decir es que muestres en pantalla el contenido de $_GET['page'] y $_GET['t'] para saber si está tomando los datos correctamente de la URL.

Si $_GET['page'] y $_GET['t'] tienen el contenido que corresponde (osea, el de la url) el problema está en el php. Si no, está en el .htaccess. Así nos acercaremos más al error y vamos descartando cosas.
 
Atrás
Arriba