Foros del Web » Administración de Sistemas » Apache »

URL amigable en PHP con .HACCESS

Estas en el tema de URL amigable en PHP con .HACCESS en el foro de Apache en Foros del Web. Gracias por adelantado... Nota: /demo/ es un directorio provisional URL inicial > http://www.anhida.es/demo/?url=guias URL amiga > http://www.anhida.es/demo/guias devuelve ------------------------------------------------------------ The document name you requested (/demo/index/guias) ...
  #1 (permalink)  
Antiguo 13/03/2011, 12:08
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
URL amigable en PHP con .HACCESS

Gracias por adelantado...

Nota: /demo/ es un directorio provisional


URL inicial > http://www.anhida.es/demo/?url=guias

URL amiga > http://www.anhida.es/demo/guias
devuelve
------------------------------------------------------------
The document name you requested (/demo/index/guias) could not be found on this server. However, we found documents with names similar to the one you requested.
Available documents:

/demo/index.php/guias (common basename)
------------------------------------------------------------


.HACCESS
Options +FollowSymLinks
RewriteEngine on
RewriteRule demo/(.+)/(.+).php$ demo/index.php?url=$1
  #2 (permalink)  
Antiguo 13/03/2011, 16:44
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 11 meses
Puntos: 11
Respuesta: URL amigable en PHP con .HACCESS

Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3. RewriteRule demo/(.+)/(.+).php$ demo/index.php?url=$1

Funciona si lo llamas desde
http://www.anhida.es/demo/guias.php

Para que funcione sin el .php (lo ideal) sería:

Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3. RewriteRule demo/(.+)/(.+)$ demo/index.php?url=$1

Si en la barra de direcciones se escribe
http://www.anhida.es/demo/guias
debería llamar por interno hacia:
http://www.anhida.es/demo/index.php?url=guias

Aunque está bien se podría mejorar, antes yo también ponía (.+), pero luego aquí me corrigieron diciendo que no es lo mejor :) resulta que . es cualquier caracter, por lo que la expresión se vuelve "codiciosa". Lo ideal sería cualquier caráctes menos la barra invertida y lo más ideal sólo los carácteres alfanuméricos.

Es decir:

Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3. RewriteRule demo/([a-z0-9]+)/([a-z0-9]+)$ demo/index.php?url=$1 [NC,L]

El NC indica que sea insensible a mayúsculas y minúsculas y la L que sea la última instrucción a interpretar.

Saludos y espero que te funcione.
__________________
Estreno blog ~ DesarrolladorWeb.cl :)
  #3 (permalink)  
Antiguo 13/03/2011, 17:10
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

muchas gracias

pero mi idea es pasar de

www.anhida.es/?url=asociación/triptico = www.anhida.es/index.php?url=asociación/triptico
a
www.anhida.es/asociación/triptico

ahorrandome ?url=

estoy haciendo las pruebas en www.anhida.es/demo/ (para las pruebas)

si las hago las pruebas en www.anhida.es me inutiliza www.anhida.es/foros/ y no se porque el HACCESS me afecta asi

Gracias de nuevo
  #4 (permalink)  
Antiguo 13/03/2011, 17:18
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

NOTA: servidor 1and1.es

he usado tu codigo en el HACCESS

http://www.anhida.es/demo/guias
--------------------------------------------
Multiple Choices

The document name you requested (/demo/guias) could not be found on this server. However, we found documents with names similar to the one you requested.
Available documents:

/demo/guias.php (common basename)
  #5 (permalink)  
Antiguo 13/03/2011, 19:39
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 11 meses
Puntos: 11
Respuesta: URL amigable en PHP con .HACCESS

Tienes razón, suponiendo que tu proyecto está en una carpeta en la raíz de tu cuenta del servidor se debería omitir el "demo"

prueba con esto:
Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3. RewriteRule ^(.+)$ index.php?url=$1 [NC,L]

Usuario escribe => PHP recibe

www.anhida.es/asociación/triptico => www.anhida.es/index.php?url=asociación/triptico

www.anhida.es/asociación => www.anhida.es/index.php?url=asociación

www.anhida.es/asociación/triptico/super => http://www.anhida.es/index.php?url=a...triptico/super

etc.

Ojalá te haya entendido :)
__________________
Estreno blog ~ DesarrolladorWeb.cl :)
  #6 (permalink)  
Antiguo 13/03/2011, 20:14
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

estupendo, este codigo no me machaca el directorio /foros/

http://www.anhida.es/guias
pero me devuelve
Error 404: NOT FOUND!

Gracias, pero algo falla, a lo mejor es una tonteria en el codigo que no lo coje bien el servidor

Última edición por quico6; 13/03/2011 a las 20:37
  #7 (permalink)  
Antiguo 14/03/2011, 17:59
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

Hola de nuevo, me acabo de dar cuenta que no me funcionaba tu ultimo codigo porque lo tenia mal escrito

observo varias cosas, tanto en el directorio propio de las pruebas como en el foro me sale la misma paguina, sin CSS y sin imagenes, y los archivos php no se cargan muy bien

¿se te ocurre que puede estar pasando?

gracias
  #8 (permalink)  
Antiguo 14/03/2011, 20:43
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 11 meses
Puntos: 11
Respuesta: URL amigable en PHP con .HACCESS

claro, resulta que si por ejemplo cargabas una imagen como <img src="img/mi_foto.png" alt="" />

Apache lo transformaba a www.anhida.es/index.php?url=img/mi_foto.png , por lo cual te hecha a perder todo.

Para solucionarlo se me ocurren 2 opciones:

1.- Cualquier carácter que NO sea un punto (solución artesanal):
Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3. RewriteRule ^([^\.]+)$ index.php?url=$1 [NC,L]

2.- Aplicar las reglas de reescritura sólo en el caso de que no se encuentre el archivo (solución profesional, como lo hacen todos):
Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3. RewriteCond %{REQUEST_FILENAME} !-f
  4. RewriteRule ^(.+)$ index.php?url=$1 [NC,L]

Prueba a ver si te funciona.

Saludos.
__________________
Estreno blog ~ DesarrolladorWeb.cl :)
  #9 (permalink)  
Antiguo 15/03/2011, 04:24
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

Ahora recibo este error
----------------------------------
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
  #10 (permalink)  
Antiguo 15/03/2011, 08:22
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

El error fue derivado de usar el block de notas, lo he vuelto a hacer con el notepad++

aun así con tus dos ultimos código parece que no responden los cambios del archivo

en el codigo actual no parece necesaria la linea
RewriteBase /
esa line la encontre en una web, parece ser que es necesaria en el servidor 1and1, pero esta vez no parece necesaria

esta vez no hace nada, y el archivo se llama .htaccess ni siquiera me descuadra subdirectorios


RESULTADO: Error 404 - Pagina no encontrada


gracias por la ayuda y la paciencia, sigo intentándolo, pero parece dificil


Este enlace si me funciona a medias, pero no me interesa index sino la variable [URL="http://www.anhida.es/index/"]http://www.anhida.es/index/[/URL]

Última edición por quico6; 15/03/2011 a las 08:49
  #11 (permalink)  
Antiguo 15/03/2011, 08:51
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

Por aqui parece que mas o menos funciona,
http://www.anhida.es/index.php/?url=test/test_hijos
aunque la diferencia es minima
http://www.anhida.es/index.php?url=test/test_hijos
tendria que ser
http://www.anhida.es/test/test_hijos


SIN CSS
<link rel=stylesheet href="style.css" type="text/css">

CON CSS
<link rel=stylesheet href="/style.css" type="text/css">

SIN IMG
<img src=bienvenidos.png>

CON IMG
<img src=/bienvenidos.png>


No me cojia una imagen, parece que apache distinge de mayusculas y minusculas


P.D: sigue saliendome lo mismo en los subdirectorios asociaciones y foros, usando cualquiera de tus dos codigos, esto es un lio

Última edición por quico6; 15/03/2011 a las 09:18
  #12 (permalink)  
Antiguo 15/03/2011, 12:27
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

Rectifico, parece ser que sin el archivo .HTACCESS funciona igual
http://www.anhida.es/index.php/
con la barra al final, curioso, eso no me lo esperaba
  #13 (permalink)  
Antiguo 15/03/2011, 14:08
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

sin el HTACCESS también funciona esta ruta con dos O MAS barras juntas
http://www.anhida.es//?url=guias
http://www.anhida.es//////?url=guias
curioso


EN MI SERVER me recomiendan (Tardaron en responder unos dias)
También se puede usar la directiva "RewriteBase /" justo antes de "RewriteEngine on", sin tener que añadir el "Options +MultiViews".

Última edición por quico6; 15/03/2011 a las 14:17
  #14 (permalink)  
Antiguo 15/03/2011, 16:17
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

De esta forma no pasa nada, al menos no se me descuadran los subdirectorios

#RewriteBase /
#Options +FollowSymLinks
Options +MultiViews
RewriteEngine on
#RewriteRule ^([^\.]+)$ index.php?url=$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [NC,L]
  #15 (permalink)  
Antiguo 16/03/2011, 05:14
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

suponiendo que lo entienda algo
se recoje en (.+) y sa pasa a $1
RewriteRule ^index.php\/(.+)$ index.php?url=$1 [NC,L]

http://www.anhida.es/asociacion/triptico
a
http://www.anhida.es/?url=asociacion/triptico

--------------

que raro, esto funciona (con y sin htaccess)
http://www.anhida.es/index.php/asociacion/triptico
  #16 (permalink)  
Antiguo 17/03/2011, 03:13
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

con esta linea me funciona pero...
RewriteRule ^(.+).html$ index.php?id=$1

pasa de
http://www.anhida.es/guias.html
a
http://www.anhida.es/?url=guias

yo lo preferia como
http://www.anhida.es/guias


y esto no me funciona
http://www.anhida.es/asociacion/triptico.html
a
http://www.anhida.es/?url=asociacion/triptico
devolviendo la variable
asociacion.php/triptico
en lugar de
asociacion/triptico

gracias

Última edición por quico6; 17/03/2011 a las 03:56
  #17 (permalink)  
Antiguo 17/03/2011, 04:44
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

he parcheado mi PHP y ahora va de perlas
<?php if ($valor[1]<>null) $valor[0] = substr($valor[0], 0,-4); ?>

lo malo es que no se sacar el (.html)


-----------------------------


RewriteBase /
#Options +FollowSymLinks
#Options +MultiViews
RewriteEngine on
#RewriteRule ^([^\.]+)$ index.php?url=$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^(.+)$ index.php?url=$1 [NC,L]
#RewriteRule ^index.php\/(.+)$ index.php?url=$1 [NC,L]
RewriteRule ^(.+).html$ index.php?url=$1
RewriteRule ^(.+)/(.+).html$ index.php?url=$1/$2
  #18 (permalink)  
Antiguo 21/03/2011, 12:57
 
Fecha de Ingreso: noviembre-2008
Mensajes: 84
Antigüedad: 16 años
Puntos: 1
Respuesta: URL amigable en PHP con .HACCESS

Prueba quitando .html en las dos ultimas reglas:

RewriteBase /
#Options +FollowSymLinks
#Options +MultiViews
RewriteEngine on
#RewriteRule ^([^\.]+)$ index.php?url=$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^(.+)$ index.php?url=$1 [NC,L]
#RewriteRule ^index.php\/(.+)$ index.php?url=$1 [NC,L]
RewriteRule ^(.+)$ index.php?url=$1
RewriteRule ^(.+)/(.+)$ index.php?url=$1/$2
  #19 (permalink)  
Antiguo 24/03/2011, 19:41
 
Fecha de Ingreso: marzo-2010
Mensajes: 32
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

si hago ese cambio
Cita:
Prueba quitando .html en las dos ultimas reglas:
entonces se ven afectados los directorios
-www.anhida.org/foros
-www.anhida.org/asociaciones

gracias
  #20 (permalink)  
Antiguo 13/07/2012, 11:45
 
Fecha de Ingreso: diciembre-2009
Mensajes: 5
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: URL amigable en PHP con .HACCESS

Buenas tardes ya que se toco el tema de las URL una consulta se me viene a la mente como se hace si se tiene 2 links distintos
ejemplo

RewriteRule ^(.*)/(.*).html$ notas.php?p=$1&titulo=$2
RewriteRule ^(.*)/(.*).html$ paginas.php?site=$1&titulo=$2

como soy nuevo en url amigables como hacer que los enlaces de la pagina reconoscan que url amigable llamar ?
  #21 (permalink)  
Antiguo 19/07/2012, 22:33
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: URL amigable en PHP con .HACCESS

Eso es imposible, tenés que diferenciar las reglas

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: php, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:40.