Problema con URL amigable

Buenas escribo para pedir ayuda porque ya estoy un poquito desesperado, ya que no me salen las cosas.

Resulta que quiero convertir mi url dinamica a url amigable.

Quiero pasar de esta url:

http://192.168.1.60/htaccess/index.php?pagina=perro&producto=collar

A esta otra:

http://192.168.1.60/htaccess/pagina-perro/collar


El mod_rewrite lo tengo activado o almenos con las pruebas que e buscado por internet para comprobarlo me han dado positivo.

La reescritura que hago es la siguiente y segun e visto en distintos videos debe de estar bien pero no se porque no me funciona.

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)-(.*)/(.*)$ index.php?$1=$2&producto=$3

#URL sin modificar http://192.168.1.60/htaccess/index.php?pagina=perro&producto=collar
#URL modificada http://192.168.1.60/htaccess/pagina-perro/collar

Gracias de ante mano por toda la ayuda que me podais dar.
Hola prueba esto

RewriteRule ^index/pagina-perro/collar/$ index.php?pagina=perro&producto=collar [QSA,L]
Nada sigo sin conseguir que me funcione las URL amigables, la verdad es que no se que hago mal y me estoy empezando ya a mosquear.

Llevo todo el día intentando y nada

El código es este:
<IfModule mod_rewrite.c>
# Activar RewriteEngine

Options +FollowSymLinks 
RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
 
RewriteRule ^a/(.*)$ index.php?a=$1
</IfModule>

Y el link que uso para hacer las prueba es el siguiente.

<a href="a/cero">Prueba</a>

Supuestamente al darle al link prueba debería llevarme de forma interna a index.php?a=cero no?

Siento ser tan pesado con el tema pero yo creo que no consigo coger el concepto de como debo hacerlo.


Gracias a todos y muy buen trabajo en el foro.
Hola

.htaccess
 
<IfModule mod_rewrite.c> 
# Activar RewriteEngine
Options +FollowSymLinks 
RewriteEngine on 
RewriteBase / 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f  
RewriteRule ^a/(.*)$ index.php?a=$1 
</IfModule> 
index.php
 
<head> 
</head> 
<body> 
<h1>index.php</h1> 
<a href="index.php/a/cero">Prueba</a> 
<?php $id = @$_GET['id']; 
echo "$id"; 
?> 
</body> 
</html> 
Bueno ya tengo el problema solucionado

resulta que al tener el .htaccess dentro de una carpeta y ponerle RewriteBase / la ruta que salia en el navegador no correspondía al patrón y este me daba error.

Oye Francisco muchas gracias por haber contestado y haberte hecho perder un poco de tu tiempo.
Bueno ahora que ya he conseguido que me funcione el rewrite me surge un nuevo problema y es el siguiente.

Ahora tengo el siguiente enlace:
<a href="pagina/cero/">Prueba</a>

Al presionar sobre el me hace la redirección perfectamente quedando la URL del navegador de la siguiente forma.
http://192.168.1.60/htaccess/pagina/cero/

Paro si volvemos a presionar el enlace con la URL como se ve arriba la url va aumentando.

http://192.168.1.60/htaccess/pagina/cero/pagina/cero/

y si ahora lo vuelvo a pulsar pues sigue infinitas veces.

Mi pregunta como puedo hacer para que al presionar en prueba no siga sino que refresque la página.

Espero haberme explicado.

Gracias de antemano
Eso es porque la url se sobrescribe al mostrarlo en la misma pagina entonces deverias mostrar los resultados en otra pagina y así no se vería el enlace y no podrían sobrescribirlo.
entonces si hago un include con php al index.php funcionaria?

Osea antes tenia en un enlace index.php?page=inicio otro con index.php?page=cursos y así con muchos otros, cuando los pulsaba se hacia un include el cual trae la página del contenido al index.php

Si lo hago igual pero con las URL amigables no se sobrescribe verdad?

Gracias por contestar.
Prueba lo pero creo que de lo que se trata es de si por ejemplo tienes los enlaces en el index.php y haces una llamada a un directorio con un enlace se dirija a ese directorio y entonces no se vera el enlace que esta en el index.php y no lo podrán volver a clicar y sobrescribir.
No te recomiendo utilizar ese sistema para cargar el contenido de los archivos a menos que los filtres correctamente, si no los usuarios maliciosos podrían atacar tu sitio. Te explico, tu cargas el contenido de lo que haya en la URL (index.php, pepito.html, juan.php, etc...), por tanto el usuario podrá leer el contenido de los archivos del servidor donde alojas la página, pudiendo sacar información para atacarte.

Otra cosa sería que lo filtraras, algo así:
<?php

$page = $_GET['page'];

if($page != ("index" OR "cursos")){
  echo "Página no válida";
  return false;
}

?>
Hola Doodleo creo que para evitar esos ataques vasta ria con incluir un index.html vació en el interior de todos esos directorios y ya no podrían leer en el interior ademas puede aver otros metodos como el que tu indicas un saludo.
Pero eso sólo sirve para que no pueda ver el listado de archivos de cada directorio amigo Francisco! :) A lo que yo me refiero es lo llamado LFI (Local File Inclusion), que dependiendo de cómo sea tu código podría ser hasta más peligroso si permite ingresar un archivo externo (Ahí sería RFI: Remote File Inclusion) y podrían ejecutar lo que quisieran en tu web...
Hola Doodleo creo que para evitar esos ataques vasta ria con incluir un index.html vació en el interior de todos esos directorios y ya no podrían leer en el interior ademas puede aver otros metodos como el que tu indicas un saludo.

Esa es una forma.

Otra forma es la que utilizan los gestores de contenidos:

if( ! defined( 'NOMBRE_CONSTANTE' ) ) {
  echo "Se saltó la página de inicio ¬¬";
  exit;
}

De cualquier forma, este trozo siempre tendrá que estar definido en cada archivo (poner un index.html en cada carpeta puede ser más corto).
Muchas gracias a todos por echarme una mano con esto.
Lo que tengo hecho esq cualquier variable por $_GET que no tenga definida me de error 404 y me mande a la página que tengo personalizada para ello.

Esto último que he dicho estaria bien?
A todo esto lo que dige que los enlaces se solapan hay alguna forma de arreglarlo?
Lo digo por no poner todo rutas absolutas ya que es más comodo rutas relativas.

Gracias de antemano y gracias por este foro.