Duda htaccess url amigable

  • Autor Autor zorrero
  • Fecha de inicio Fecha de inicio
zorrero

zorrero

Dseda
Social Media
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Buenas, tengo una web que estoy haciendo ya hace rato, lo que estoy buscando es como hacer una url amigable... Si alguien me podría ayudar sería buenisimo.

Resulta que tengo un archivo categorias.php

A la hora de llamar una categoria se la hace de la siguiente manera: categoria.php?idcat = 1

Lo que quiero es pasar de misitio.com/categoria.php?idcat=1
a una url misitio.com/categoria/1

Se que tengo que usar el archivo .htaccess pero realmente no se como hacerlo y no he logrado entenderlo bien.

Desde ya gracias
 
Creo que esto te vald
Insertar CODE, HTML o PHP:
RewriteEngine On #Activa el mod_rewrite que es con lo que se va a conseguir llevar a cabo todo
RewriteCond %{SCRIPT_FILENAME} !-d #Se comprueba que no existe una carpeta con el nombre solicitado
RewriteCond %{SCRIPT_FILENAME} !-f #Se comprueba que no existe un archivo con el nombre solicitado
Rewriterule ^categoria/([0-9]+)/?$ categoria.php?idcat=$1 [L,QSA] #Y entonces es cuando se lleva a cabo la magia :D

Lo importante es Rewriterule, esto establece que si se pide una URL con el formato descrito, se puede redirigir/transformar la petición internamente a otro sitio, de forma que al solicitar /categoria/1 pues haga que en realidad se procese como categoria.php?idcat=1
Rewriterule tiene 2 partes importantes: regla y destino

Te describo que hace la regla anterior:
^categoria/ Indica que la URL solicitada tiene que comenzar por 'categoria/'
([0-9]+) Indica que tiene que aparecer una secuencia de números, y que este entre paréntesis sirve para indicar/usarlo como parámetro.
/?$ Indica que la URL puede o no terminar en una /

Y ahora el destino, lo único a entender es el $1, eso hace referencia al primer parámetro que marcamos con paréntesis en la regla.
Si en la regla hubiese varias partes entre paréntesis, pues en el destino podríamos usarlos con $1, $2 ..... $n

[L,QSA] No es realmente necesario.
L significa que si esa regla se cumple, no se siga procesando otras reglas.
QSA significa que si la URL amigable tiene parámetros, estos se copien a la URL destino, ejemplo:
/categoria/1?ordenar=precio se traduce en categoria.php?idcat=1&ordenar=precio


Hay muchas guías sobre URLs amigables, si tienes dudas de como usarlas estoy seguro que puedes encontrar algo completo buscando un segundo en Google.


PD: no he probado la regla, así que si no funciona quizás es porque se me pasó algún detalle.
Ten en cuenta también que tu hosting debe disponer del mod_rewrite de Apache activo.
 
Si usas codeigniter como framework te recomiendo usar este htaccess

Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ /index.php/$1 [L]

Si estas programando manual pueds usar este

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

#RewriteRule ^controlador(.*)$ /controlador/index.php?control=controlador&action=$1
 
Atrás
Arriba