Hola gente.
Les comento que estoy por hacer una web de noticias, y para mejorar un poco el SEO, quiero que las URL de las noticias, sean del tipo:
www.xxxxx.com/titulo_de_la_noticia
Me han dicho que tengo que modificar el archivo .htaccess
Pero nadie me dice que tengo que colocar..
Que tengo que colocar dentro de .htaccess?
Como "tomo" la cadena esa para buscar la noticia correspondiente luego?
Tambien pensaba:
Una vez que tenga ese texto, supongamos que es: "Windows XP SP3", tendré que mirar en la base de datos, cual noticia tiene ese titulo... Por ende, tendré que crear un indice en la base de datos, en un campo de texto variable de gran longitud... Me pesará MUCHISIMO el Indice... Pero, ¿no queda otra solucion? (tal vez acotar el indice)
puedes hacerlo por 2 formas, mod_rewrite
http://forum.modrewrite.com/viewtopic.php?f=12&t=1447
o separando los parametros de la url
http://www.tutorio.com/tutorial/php-alternative-to-mod-rewrite-for-se-friendly-urls
en este ultimo tocan ambos temas
Veo que Blogger, usa el 2º item..
Porque los posteos son del tipo: www.xxx.com/año/mes/titulo
Será la mejor manera..
si son asi, usan ambos, mod rewrite para pasarle todos los parametros a index.php y asi prescindir de el en la url o seria
url/index.php/param1/param2/param3
Mira vos..
Pero...
Supongamos que en mi web, quiero entrar a X noticia, de la sección Tecnologia... sería:
xxx.com/tecnologia/titulo
QUe pasa si el usuario escribe: xxx.com/index.php/tecnologia/titulo.
Ahí, utilizando la tecnica de explode(), habría un parametro que sería index.php.. o me equivoco?
Les comento que quiero implementar este sistema, principalmente por un tema SEO.
Me dijeron que Google "quiere" un poco mas a las URL con ese sistema. es así realmente?
Tambien facilita "la lectura" de la url... pero eso es mas secundario
si, a los buscadores les gusta más el tipo web.com/sección/id-articulo
que no web.com/?sec=seccon&id=1
Pero creo recordar que a los 4-5 slashes te empieza a mirar feo... :¬¬
igual con las concatenaciones de variables a las 6-7 también te mira feo xd
Cita de: Skeletron en 19 Mayo 2010, 09:35 AM
Mira vos..
Pero...
Supongamos que en mi web, quiero entrar a X noticia, de la sección Tecnologia... sería:
xxx.com/tecnologia/titulo
QUe pasa si el usuario escribe: xxx.com/index.php/tecnologia/titulo.
Ahí, utilizando la tecnica de explode(), habría un parametro que sería index.php.. o me equivoco?
nope... todo lo que esta despues de index.php serian los "parametros" que le pasas a ese archivo, es necesario que indiques el archivo al que se los pasa, por eso se usa el mod_rewrite, para obviar escribir el archivo y enviar absolutamente todo como parametro a index.php... aunque necesistarias un par de condiciones, como:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
Otra pregunta:
Si el titulo de la noticia es: Bill Gates, ha muerto
el link, será: xxx.com/tecnologia/bill-gates-ha-muerto
Y como verán, no tendrá esa "," que está luego de GATES.
En todos lados es de esa manera.
Como puedo hacer eso?
La entrada en la base de datos, tendrá que ser del estilo:
LINK
TITULO
TEXTO
FUENTE
Y el link a mostrar, tendré que guardarlo en "LINK".. y será el INDEX...
O hay algun metodo mejor?
Porque no me imagino como hacen esas webs para mostrar "bill gates, ha muerto" de titulo, y en la url, las comas y signos extraños no estan.
normalmente se remplazan los carácteres especiales por nada..
siendo , ? $ % & á à é è etc...
Me parece, que ya Skeletron tiene una solucion disponible mas beneficiosa que la que habia considerado ;) solo que ya no puedo exponerle mas sobre el tema, solo le di la sugerencia de que podia hacer y el la vio completamente valida y considero que era perfecta para lo que el esta buscando :rolleyes: espero que alguien que entienda y maneje los numeros mejor que yo :xD pueda autocompletar tus dudas muchacho, al menos ya vas encaminado.
Hay algo que no me quedó claro.
Si no quiero usar el mod_rewrite o como se llame. Necesito hacer "como una redireccion" para que no dé error 404.
Porque si programo todo con el explode, todo muy bonito, pero sigue dando el error 404. de pagina no encontrada.
Como soluciono eso?
Busca sobre Url Amigables,
Ejmplo tenes el archivo llamado asdadssda.php
vos pones /asdadssda en tu navegador y agarra el asdadssda.php
Busca sobre Url Amigable o dejame que llege a mi casa y te paso el codigo
Posta, no entiendo nada.
Alguien me puede dar una mano?
Yo quiero hacer algo así:
xxx.com/variable1/variable2/variable3
Como hago para que eso no me de un error de "FILE NOT FOUND" o que no se encuentra el archivo y demas.
Y como puedo ver desde PHP el valor de esas variables
Bueno mira ahi te lo paso
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule categoria/(.*)/(.*).html $1.php
ahi tenes un ejemplo
y los links de tu web pones asi
categoria/idde la web/loquequieras.html
por ejemplo
www.tuweb.com/categoria/el id de la web/el titulo.html
Calculale que el id de la web es p2.php y se trata sobre Como crear una web
tonses el link kedaria
www.tuweb.com/categoria/p2/Como-crear-una-web.html
www.tuweb.com/categoria/p2/Crear-web.html
O como quieras que el buscador "Google" lo reconozca
www.tuweb.com/categoria/p2/mira-esta-pagina-google-xd.html
Saludo cualquier cosa segi posteando en el hilo
Mira te doy un ejemplo con tu web
crea un archivo llamado ".htaccess"
ponele dentro esto:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule categoria/(.*)/(.*).html $1.html
y entra haci a tu web
http://www.brodasoft.com.ar/Sobre-Mi/Datos-sobre-Mi.html
entonces entra a lo que queres y si a Sobre-Mi.html le cambias el nombre a 1.html quedaria haci
http://www.brodasoft.com.ar/1/Datos-sobre-Mi.html
Si queres agregar categoria pones este codigo en el ".htaccess"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule categoria/(.*)/(.*).html $2.html
http://www.brodasoft.com.ar/aca-categoria/Sobre-Mi.html
ej:
http://www.brodasoft.com.ar/Nosotros/Sobre-Mi.html
http://www.brodasoft.com.ar/About/Sobre-Mi.html
No se expresarme bien cualquier cosa pregunta algo directo y lo respondo
Gracias por el ejemplo, pero no estoy buscando hacer algo con archivos, como lo estas haciendo vos.
Lo que yo quiero hacer, es con variables. Para tomar los datos de la URL, para bsucar dentro de la base de datos.
Por ejemplo:
www.brodasoft.com.ar/usuarios/12/edad
Quiero que "usuarios" quede guardado en una variable, al igual que 12, y edad
algo así:
$var1=usuarios
$var2=12
$var3=edad
Luego, muestro con PHP la EDAD del USUARIO con ID=12
:)
Pero creo estar entendiendo un poquito la sentecia que va dentro del .hachashhcahschsssss
Pero, si me podes ir dando una mano, mejor.
Yo apenas logre algo, te digo
AGREGO:
AHH.. y me parece que tenes un error en una lina:
RewriteRule ^(.*)/(.*)$ $1.php
Te faltaba el ^ y el $
O no?
AGREGO:
Creo que lo que yo quiero hacer, es ésto:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Rewriterule ^(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3
O me equivoco?
Yo trabajo SOLAMENTE con el INDEX.php
Los demas archivos los "include" en el index.
Cita de: Skeletron en 29 Mayo 2010, 22:28 PM
Hay algo que no me quedó claro.
Si no quiero usar el mod_rewrite o como se llame. Necesito hacer "como una redireccion" para que no dé error 404.
Porque si programo todo con el explode, todo muy bonito, pero sigue dando el error 404. de pagina no encontrada.
Como soluciono eso?
dominio.com/index.php/categorias/demas/parametros
los parametros no le llegan a index.php por magia :P
Yo la forma que te di esta bien, vos la tenes q modificar para tu agrado, ej: para variable le mandas en el .htaacsss el index.php por variable.php?var=$1
lee esto
http://www.maestrosdelweb.com/editorial/urlamigable/
Acabo de hacerlo funcionar.
El problema está en que hay que configurar para cada cantidad diferentes de variables que lleguen.
Mi .hactcss, quedó asi:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteBase /
Rewriterule ^(.*)$ index.php?x=$1
Rewriterule ^(.*)/(.*)$ index.php?x=$1&y=$2
Rewriterule ^(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3
Fijense las ultimas 3 lineas, como describo para cuando hay 1, 2 y 3 parametros...
Eso me estaba dando error... Porque yo colocaba solamente para 3 parametros, y probaba con 1.
:)
Gracias gente!!! Muchas Gracias!
*****, aun queda un problea mas.
Si entro a .com/parametro1/parametro2
Y muestro los valores, todo funciona correctamente.
Pero las imagenes en la web, intentan abrir desde .com/parametro1/image.jpg
En imagenes del estilo:
<img src="logo.png" />
Pero si coloco:
<img src="/logo.png" />
Funciona correctamente.
Esa es la solucion correcta?
si.. aunque lo ideal es hacer algo como $SITE_URL."imagen.jpg" para la ruta
Increible.. Pero me surgió otro problema.
Como ya les dije, es así como tengo el .nombreraro:
Rewriterule ^(.*)$ index.php?x=$1
Rewriterule ^(.*)/(.*)$ index.php?x=$1&y=$2
Rewriterule ^(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3
En el index. muestro ell valor de la variable X, Y y Z.
Pero miren los resultados de las diferentes pruebas:
http://localhost:8084/favio
X: favio
Y:
Z:
http://localhost:8084/favio/
X: index.php
Y:
Z:
http://localhost:8084/favio/noel
X: index.php
Y: noel
Z:
http://localhost:8084/favio/noel/
X: index.php
Y: noel
Z:
http://localhost:8084/favio/noel/broda
X: index.php
Y: noel
Z: broda
http://localhost:8084/favio/noel/broda/
X: index.php/noel
Y: broda
Z:
(desde aca en adelante, funciona con normalidad... pero porque le agrego el index.php... si coloco en x a $2 en vez de $1, y así sucesivamente con Y y Z, funcionará perfectamente...)
http://localhost:8084/index.php/favio
X: index.php
Y: favio
Z:
http://localhost:8084/index.php/favio/
X: index.php
Y: favio
Z:
http://localhost:8084/index.php/favio/noel
X: index.php
Y: favio
Z: noel
Ahhh.. amigos.. si no me dan una mano con ésta.. me corto las bolas..
Han visto el comportamiento?
Como si, al colocar el 2º parametro, el 1º se pierde y se reemplaza por index.php
Pero funciona correctamente si escribo index.php en la url
Hmm, prueba hacerlo alrevez.
Rewriterule ^(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3
Rewriterule ^(.*)/(.*)$ index.php?x=$1&y=$2
Rewriterule ^(.*)$ index.php?x=$1
Creo que lo que pasa es que la expresion ^(.*)$ incluye a ^(.*)/(.*)/(.*)$. No se mucho de REGEX...
Ahora que lo dices, es verdad. ese podria ser el error.. pero lo he probado al revez.. y no funciona para nada
de las 2 maneras, no me funciona..
Aca dejo como estoy implementando todo:
.htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteBase /
Rewriterule ^(.*)$ index.php?x=$1
Rewriterule ^(.*)/(.*)$ index.php?x=$1&y=$2
Rewriterule ^(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3
Rewriterule ^(.*)/(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3&zz=$4
Y a las variables, las tomo en el index.php así:
echo 'X: '.$_GET['x'].'<br>';
echo 'Y: '.$_GET['y'].'<br>';
echo 'Z: '.$_GET['z'].'<br>';
Así muestro el valor de cada variable..
Gracias por ayudarme hasta el momento.
Y espero me sigan ayudando.. que tengo todo el proyecto parado por culpa de esta *****
Disculpen que siga jodiendo..
Es increible.. No puedo U.U
Alguien me da una mano?
GENTE!!!!!!!!........
Encontre el error.
Pero necesito una mano para solucionarlo.
El tema, es el siguiente:
Las reglas, deben estar colocadas como dijo MF anteriormente.
Tambien hay que agregar [L] (mas un espacio luego del ultimo corchete), para que se comporte como un "elsefi".. o sea que, cuando encuentra una regla que se cumple, deja de comprobar las demas.
Pero miren, aca hay un problema:
Rewriterule ^(.*)/(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3&zz=$4 [L] <<<PERFECTA PARA 4 PARAMETROS
Rewriterule ^(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3 [L] <<<PERFECTA PARA 3 PARAMETROS
Rewriterule ^(.*)/(.*)/$ index.php?x=$1&y=$2asd [L] <<<PERFECTA PARA 2 PARAMETROS
Rewriterule ^(.*)$ index.php?x=$1 [L] <<<¡¡¡PROBLEMA!!!
Porque el problema? es facil, porque el REGEX; (.*), implica "CUALQUIER COSA", entonces, tambien involucra para los 4 parametros, 3, 2 y 1... y 1232345123, y lo que sea...
Si yo borro esta ultima regla, TODO FUNCIONA PERFECTAMENTE, obviamente, menos las URL que tiene 1 solo parametro.
Entonces, el problema esta en como lograr hacer que ande con 1 solo parametro???
Pense en agregarle una barra al final a la ultima regla.. algo asÍ.
Rewriterule ^(.*)/(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3&zz=$4 [L]
Rewriterule ^(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3 [L]
Rewriterule ^(.*)/(.*)$ index.php?x=$1&y=$2 [L]
Rewriterule ^(.*)/$ index.php?x=$1 [L]
Pero, es lo mismo que la anterior.. ya que considera que es de 2 parametros, con el 2º "null"..
CLaro, todas las web que dan ejemplos, como:
http://www.maestrosdelweb.com/editorial/urlamigable/
Hablan de que todo funciona perfectamente, pero con las URL con una "/" al final.... Y queda mal... porque no podria tener url del tipo:
.com/noel
tendría que ser:
.com/noel/
:D
Me da una ultima mano con ésto? :D
DIOSSSSSSSSSSS!!!!!!!!!!!!!
FUNCIONÓ!
Lo logre...
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteBase /
Rewriterule ^(.*)/(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3&zz=$4 [L]
Rewriterule ^(.*)/(.*)/(.*)$ index.php?x=$1&y=$2&z=$3 [L]
Rewriterule ^(.*)/(.*)$ index.php?x=$1&y=$2 [L]
Rewriterule ^([a-zA-Z0-9]+)$ index.php?x=$1 [L]
Así es como quedó mi querido .htaccess.
Noten que con la 1º regla, puedo analizar 4 parametros, la 2º regla: 3 parametros, la 3º regla,: 2 parametros, y la 4º (ultima), lo que analizo, es que haya almenos 1 numero o letra luego de la barra del .com (eso lo aclara el rewritebase /), pero sin la existencia de una "/" al final, por lo que ignoraría a un segundo parametro, y funcionaría solamente para 1 parametro.
Estoy seguro que luego de terminar con ésto, y especificar mas correctamente cada una de las reglas (ya que faltan otras intermedias, para que no se creen variables al pedo.. por si algun tonto agrega una barra al final del ultimo parametro, y se crea otro parametro nulo mas, pero que con el ISSET de PHP, sataría como que existe el otro parametro, cuando en realidad no..
Ya haré a glun tuorial, y lo subo al Wiki del foro... Ya tengo que hacer 2 tutoriales :D
Las amo nenas (?)