.htaccess: simplificar direcciones
4 seguidores
el otro día leyendo www.minid.net, leí su artículo101_formas_de_salvar_internet
Me pareció genial la idea de simplificar las URL's como se muestra en el punto 7. del articulo al que hace mención... pero una duda, como se puede simplificar la dirección de un post tan complejo?
meddle
.htaccess usando el mod_rewrite (algo complejo, pero se puede, mira mi weblog)
black
veo que tú también lo utilizas! tienes información en tu weblog? si es así, no lo encuntro... sigo buscando...
meddle
no, no puse nada al respecto. como el sistema de weblog me lo hice yo esta bastante adaptado a mis necesidades, pero puedo compartir algunos secretos (bueno pero poco...) :)
ahora que lo miro bien, estoy usando .htaccess simplemente para las secciones principales. Por ejemplo, haciendo que /weblog/ sea /weblog.php y el php para las categorias en las url del weblog. Es decir, una vez ha leido que /weblog/ es weblog.php entonces lo siguiente es hacer algo del estilo:
<code>$URI = $_SERVER['REQUEST_URI'];
$exploded = explode("/",$URI);
$dirs = count($exploded)-3;
</code> y jugar con los dirs para mostrar segun lo que quieras.
black
ignoracia = 0;
vale, y esto con asp se puede?
Gracias por desvelar parte de tu secreto ;)
meddle
el modulo de reescritura en asp es de pago.
por cierto, para hacer directorios virtuales en php yo hago algo como (lo hago uno a uno, tengo pocos directorios):
<code>RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^(.*)about/(.*)$ $1about.php?$2 [L]
RewriteRule ^(.*)weblog/(.*)$ $1weblog.php?$2 [L]
...</code>aunque hay otras maneras de hacerlo.
orange
Macho, me estoy comiendo la cabeza ahora mismo con eso
En principio el código se pega en el .htaccess asi, tal cual, ¿o como? ... porque me he empollado la documentación del apache y no salgo de ahi
Imaginaos que yo tengo esta estructura
domonio/mod/prueba.php
Y quiero que las urls sean dominio/mod/loquesea
Mi prueba.php lo que quiero que haga es capturar "loquesea" a través de una variable "prueba"
El .htaccess en teoria deberia ser asi
RewriteEngine On
RewriteRule /mod/(.+) /mod/prueba.php?prueba=$1
Pero no consigo que rule
¿Sabeis qué estoy haciendo mal?
black
yo no sé ni lo que son .htaccess y el mod_rewrite :S :D
orange
Bueno, somera y escasa explicacion:
El .htaccess es un ficherito que se puede poner en cada directorio y que puede regular un montón de cosas
- Si está protegido por contraseña
- Modificar propiedades de los archivos que están en el
- Gestionar errores
- Etc....
Y una de las cosas que puede hacer es gestionar el mod_rewrite, que es el modulo de reescritura de URLs de Apache. ¿Qué hace exactamente?
Pues mod_rewrite se ancarga de que una direccion tan boniiita como galeria/autor/trabajo se convierta en algo parecido a galeria.php?autor=autorX&trabajo=trabajoX.
Es decir, que puedes tener URLS "user friendly", y el se encarga de convertirlas en las "viejas y feas" de toda la vida, pero necesarias para poder mostrar las páginas correctamente
black
gracias orange!
pues que buena! pero eso solo vale para servidores Apache, no?
meddle
si, solo para servidores apache. asp tiene algo parecido pero de pago.
orange, prueba esto:
<code>RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^mod\/([^\/]*)\/$ /prueba.php?prueba=$1 [L]</code>
En teoria eso te permite tener dominio/mod/loquesea, donde loquesea pasa a ser el valor de la variable 'prueba' dentro de prueba.php
Aunque normalmente dominio/mod/loquesea no funciona y hay que hacer dominio/mod/loquesea/ (eso es un problema de apache que no se puede arreglar cuando se usa mod_rewrite, se llama el trailing slash)
orange
Nada tio -> 404
No sé si no reescribe bien la URL o es que ni siquiera pone en marcha el modulo
meddle
<code><?php phpInfo(); ?></code>a ver si encuentras el mod_rewrite en la lista y me cuentas.
txuma Plus
Me entrometo un pelín.... ;)
He hecho un phpInfo en el server que está probando orange y parece que el módulo si está cargado...
meddle
orange, creo que mod es un directorio real, no? en ese caso no te va a furular lo que he puesto. prueba con uno que no exista, a ver.
orange
jejeje .... eres un crack ... le he hecho una pequeña modificacion
RewriteRule ^mod\/([^\/]*) /prueba.php?prueba=$1 [L]
Porque
dominio/mod/perro/ me lo pillaba
Pero
dominio/mod/perro no lo hacía
Y prefiero linkarlo sin la barra ....
De todas formas, para solucionar ese problema ¿qué harias? ... utilizar 2 RewriteRule; o simplemente redirigir todo el tráfico hacia una pagina php sin pasarle nada, y que esta página descompusiese la URI
meddle
si te refieres al problema del trailing slash (la ultima barra de la direccion): NO HAY SOLUCION cuando usas mod_rewrite. Eso es por razones tecnicas de conflicto con otro modulo, el mod_dir.
Aunque puedo estar equivocado, claro. Agradeceria que alguien me corrigiera.
Yo lo que hago es forzar poniendo siempre la / al final, luego en el .php paso la url por un explode y me quedo con las variables que necesito, por si la / no existe. :)
orange
Ya, a eso me refería, de todas formas es dicífil controlar cómo te van a linkar desde fuera, por lo que habría que tener las dos posibilidades previstas
Asi a bote pronto bastaría con poner dos RewriteRule, una con y otra sin, para que, en funcion de la URL que le llega, aplicase una u otra.
De hecho creo que es la unica forma de estar seguro al 100%
Otra cosa más acerca del mod_rewrite, y que tiene que ver con el rendimiento. Por lo visto esta forma de funcionar "duplica" en cierta forma el trabajo del servidor.
Es decir, al apache le llega una petición, la sirve, se captura la URL, se transforma y se vuelve a hacer otra petición ...
Existe otra forma de hacer URLs guapas ... consiste en ejecutar como php archivos sin extension, de forma que en la ruta dominio/seccion/trabajo, yo puedo tener un archivo que se llama seccion (sin extension) que se ejecute como php. En ese php se trataria la $REQUEST_URI como tu haces.
En realidad, esto funciona porque cuando el apache no encuentra un archivo (en esta caso /trabajo/paginapordefecto) va subiendo por el arbol hasta que encuentra algo (y si no da un 404, aunque aqui también depende de los ficheros .htaccess que se encuentre por el camino) ... asi que cuando llega a seccion, ve que es un archivo que puede ejecutar
Para hacer que esos archivos se tratasen como php hay dos formas, a traves de .htaccess (con el ForceType Directive) ... pero entonces estaríamos en las mismas .... o a través del http.conf (de difícil acceso en un hosting, lamentablemente) que es la unica manera de que se se "duplique" la petición, y que puede ser interesante en sitios de mucho tráfico, y en los que tenemos mucho control sorbe la configuración de nuestro server
Si a alguien le interesa el tema tengo unos cuantos links sobre el asunto
black
que puta envidia... me parece que le van a dar por el c*lete a ASP... :(
orange
Puedes preguntar en tu hosting ASP, estas cosas a veces las tienen compradas (como el popular ASPEmail o ASPUpload, otras cosas que por cierto PHP hace por si sólo) ....
Y para hacer pruebas en local siempre encutras algo en la mulita
XD
Y sino ya sabes, pásate a PHP
black
orange
Puedes preguntar en tu hosting ASP, estas cosas a veces las tienen compradas
típico de ASP... :( La cosa es que estoy viendo la cantidad de posibilidades que da php y se me ponen los dientes largos... ASP tb tiene cosas, pero es una ruina, sobre todo en mi servidor... donde no tienen casi nada instalado.
mañana a la mañana pregunto, a ver que me cuentan... hoy se hace tarde... Buenas nooooches!!! ;)