Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Como dejo urls amigables

Estas en el tema de Como dejo urls amigables en el foro de PHP en Foros del Web. Tengo esta url: http://chatdelmundo.com.es/index.php?p=pages Como quito index.php?p= en todas las urls?...
  #1 (permalink)  
Antiguo 11/05/2013, 09:06
Avatar de ChatDelMundo  
Fecha de Ingreso: abril-2013
Mensajes: 98
Antigüedad: 11 años
Puntos: 1
Como dejo urls amigables

Tengo esta url: http://chatdelmundo.com.es/index.php?p=pages

Como quito index.php?p= en todas las urls?
__________________
chatdelmundo.es
  #2 (permalink)  
Antiguo 11/05/2013, 09:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como dejo urls amigables

Te sugiero buscar en el foro, existen bastantes temas al respecto, inclusive Google te hubiera dado muchos resultados al caso, aprende a buscar antes de abrir temas nuevos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 11/05/2013, 09:34
Avatar de ChatDelMundo  
Fecha de Ingreso: abril-2013
Mensajes: 98
Antigüedad: 11 años
Puntos: 1
Respuesta: Como dejo urls amigables

Cita:
Iniciado por pateketrueke Ver Mensaje
Te sugiero buscar en el foro, existen bastantes temas al respecto, inclusive Google te hubiera dado muchos resultados al caso, aprende a buscar antes de abrir temas nuevos.
Hay que editar el archivo .htaccess

Lo tengo asi:

Código PHP:
<IfModule mod_rewrite.c>
RewriteEngine on
 
# To append a query string part in the substitution string
RewriteRule ^([0-9a-z_/-]+)/$ index.php?p=$[QSA]
RewriteRule ^([0-9a-z_/-]+)$ index.php?p=$[QSA]
</
IfModule>

RewriteCond %{HTTP_HOST} ^www.chatdelmundo.com.es$
RewriteRule ^/?$ "http\:\/\/chatdelmundo\.com\.es\/" [R=302,L
como lo dejo pa que no salga esto: index.php?p=
__________________
chatdelmundo.es
  #4 (permalink)  
Antiguo 11/05/2013, 10:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como dejo urls amigables

Cita:
como lo dejo pa que no salga esto: index.php?p=
¿Qué no salga donde?

La configuración de mod_rewrite no es mágica y no reemplaza los enlaces de tus paginas, esos los debes cambiar tu manualmente.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 11/05/2013, 10:36
Avatar de ChatDelMundo  
Fecha de Ingreso: abril-2013
Mensajes: 98
Antigüedad: 11 años
Puntos: 1
Respuesta: Como dejo urls amigables

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Qué no salga donde?
Para que no salga esa url en el navegador.

Que tengo que hacer manualmente?

Que tengo que borrar o editar dame un ejemplo porfa...

Las urls funciona sin esto: index.php?p=

¿como lo edito para que en el menu no salga ?
__________________
chatdelmundo.es

Última edición por ChatDelMundo; 11/05/2013 a las 10:47
  #6 (permalink)  
Antiguo 11/05/2013, 10:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como dejo urls amigables

Te explico.

Lo que hace mod_rewrite es únicamente reescribir la URL del request internamente, pero no cambia tus enlaces en tus scripts, eso lo tienes que cambiar tu.

Debes escribir tus enlaces viejos (los que intentas reescribir) por sus formas nuevas, la idea es que sólo cambies eso, ya que la programación no debes tocarla, solo los enlaces.

Código HTML:
Ver original
  1. Forma vieja:
  2. <a href="?p=pages">link</a>
  3.  
  4. Forma nueva:
  5. <a href="/pages">link</a>
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 11/05/2013, 13:20
Avatar de ChatDelMundo  
Fecha de Ingreso: abril-2013
Mensajes: 98
Antigüedad: 11 años
Puntos: 1
Respuesta: Como dejo urls amigables

Cita:
Iniciado por pateketrueke Ver Mensaje
Te explico.

Lo que hace mod_rewrite es únicamente reescribir la URL del request internamente, pero no cambia tus enlaces en tus scripts, eso lo tienes que cambiar tu.

Debes escribir tus enlaces viejos (los que intentas reescribir) por sus formas nuevas, la idea es que sólo cambies eso, ya que la programación no debes tocarla, solo los enlaces.

Código HTML:
Ver original
  1. Forma vieja:
  2. <a href="?p=pages">link</a>
  3.  
  4. Forma nueva:
  5. <a href="/pages">link</a>
No encontre en mis scripts ese formato.

Estuve buscando y la forma de editar los enlaces me parece que es este codigo:

Código PHP:
$_REQUEST['p'] = str_replace('-','',$_REQUEST['p']);
if (!
strlen($_REQUEST['p'])) {
    
$parr[0] = 'home';
    
$parr[1] = 'index';
}
elseif (!
eregi("^[0-9a-z_/.\|]+$",$_REQUEST['p'])) {
    
sys_break('Wrong path:'.htmlspecialchars($_REQUEST['p']));
}
else {
    
$parr explode('/',$_REQUEST['p']);
    if (
$parr[1]) {
        
$act =  $parr[1];
    }
    else {
        
$act 'index';
    }

__________________
chatdelmundo.es
  #8 (permalink)  
Antiguo 11/05/2013, 14:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como dejo urls amigables

No, el script que muestras es el que extraer las variables de la URL, ese lo debes dejar intacto.

El código que debes editar es el que genera tus enlaces, el que los imprime, los menús o como les quieras llamar. Me refiero a la parte del HTML que son los enlaces, los elementos <a> de tu navegación son los que debes actualizar.

¿Me explico?

Deberías mostrar algo de estos menús que tienes, ya que en cualquier parte que hagas uso de un enlace para tu sistema debe estar escrito de la nueva forma para que al pasar el mouse encima o hacer clic la ruta en el navegador sea la nueva.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 11/05/2013, 15:21
Avatar de bulter  
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 16 años, 3 meses
Puntos: 20
Respuesta: Como dejo urls amigables

No puedo ni explicar como de malo es usar $_REQUEST, ni me atrevo ...
pateketrueke te ha guiado muy bien, lee algo sobre mod_rewrite la web esta ... saturada sera poco decir , con informacion y tutoriales sobre el tema.
Pero si tanto quieres que sea mediante PHP, ahora te escribo una funcion que tal vez te sirva...
(3 mins. latter) No se si es la mejor forma, pero es la mejor que se me ocurre sin tocar mod_Rewrite

Código PHP:
<?php

function getUrlParameters()
{
    if(!
array_key_exists("PATH_INFO"$_SERVER))
    {
        return 
null;
    }
    
    
$parametersParse explode("/"substr($_SERVER["PATH_INFO"], 1strlen($_SERVER["PATH_INFO"])));
    
$params = array();

    if(
count($parametersParse) <= 0)
    {
        return 
null;
    }
    
    for(
$i 0$i <= count($parametersParse) - 1$i += 2)
    {
        if(!empty(
$parametersParse[$i]))
        {
            if((
count($parametersParse) - 1) < ($i 1))
            {
                
$value "";
            }
            else
            {
                
$value $parametersParse[($i+1)];
            }
            
            
$params[$parametersParse[$i]] = $value;
        }
    }

    if(
count($params) <= 0)
    {
        return 
null;
    }
    else
    {
        return 
$params;
    }
}

$params getUrlParameters();

if(
$params == null)
{
    echo 
"error";
}
else
{
    
print_r($params);
}
?>
Con una URL como esta:

el resultado seria:

Código:
Array ( [parameter1] => value [parameter2] => value2 )
URL format:

Cita:
http://____.[com|net|org|etc...]/file.php/parameter/value
Saludos :>>>
  #10 (permalink)  
Antiguo 11/05/2013, 16:56
Avatar de ChatDelMundo  
Fecha de Ingreso: abril-2013
Mensajes: 98
Antigüedad: 11 años
Puntos: 1
Respuesta: Como dejo urls amigables

Cita:
Iniciado por pateketrueke Ver Mensaje

Deberías mostrar algo de estos menús que tienes, ya que en cualquier parte que hagas uso de un enlace para tu sistema debe estar escrito de la nueva forma para que al pasar el mouse encima o hacer clic la ruta en el navegador sea la nueva.
En el archivo boot.inc.php sale asi el menu:

Código PHP:
// menu
if (!strlen($parr[1]))
    
$current_menu_path $parr[0];
else
    
$current_menu_path $parr[0].'/'.$parr[1];
$menu_items = array();
$res sql_query("select * from ".tb()."menu order by weight ASC");
while (
$row sql_fetch_array($res)) {
    
$row['allowed_roles'] = explode(',',$row['allowed_roles']);
    
$menu_items[$row['path']] = $row;
    if (
$row['protected'] && !allow_access($row['allowed_roles'])) {
        continue;
    }
    if (
$row['type'] == 'personal' && $row['actived']) {
        
$personal_menu[] = $row;
    }
    elseif (
$row['type'] == 'community' && $row['actived']) {
        
$community_menu[] = $row;
    }
    elseif (
$row['type'] == 'admin' && $row['actived']) {
        
$admin_menu[] = $row;
    }
    elseif (
$row['type'] == 'tab') {
        
$all_tab_menu[] = $row;
    }
}
if (
strlen($menu_items[$current_menu_path]['parent'])) {
    
$top_menu_path $menu_items[$current_menu_path]['parent'];
}
else {
    
$top_menu_path $current_menu_path;
}
if (
strlen($menu_items[$current_menu_path]['name'])) {
    
set_title(t($menu_items[$current_menu_path]['name']));
}
if (
strlen($menu_items[$top_menu_path]['name'])) {
    
$top_title t($menu_items[$top_menu_path]['name']);
}
if (
is_array($all_tab_menu)) {
    foreach (
$all_tab_menu as $arr) {
        if (
$arr['parent'] == $top_menu_path) {
            
$tab_menu[] = $arr;
        }
    }
}

$hide_ad_roles explode('|',get_gvar('hide_ad_roles'));
if (
is_array($hide_ad_roles)) {
    foreach (
$hide_ad_roles as $role) {
        if (
in_array($role$client['roles'])) {
            
$config['hide_ad'] = 1;
        }
    }
}

$nav[] = url('home','Home');
require_once 
'./includes/libs/apps.inc.php'
En el archivo page.tpl.php sale asi:

Código PHP:
<div id="jcow_community_menu">
<ul class="menu">
<?php
echo '<li '.check_menu_on('home/index').'>'.url(uhome(),t('Home')).'</li>';
if (
is_array($community_menu)) {
    foreach (
$community_menu as $item) {
        echo 
'<li '.check_menu_on($item['path']).'>'.url($item['path'],t($item['name'])).'</li>';
    }
}
?>
</ul>
</div>

</div>
</div>
Al editar el En el archivo page.tpl.php me funciona si hago esto:
Código PHP:
<div id="jcow_community_menu">
<
ul class="menu">
<
li  class="menugen" ><a href="http://chatdelmundo.com.es">Inicio</a></li><li  class="menugen" ><a href="/pages">Páginas</a></li><li  class="menugen" ><a href="/feed">Noticias</a></li><li  class="menugen" ><a href="/events">Eventos</a></li><li  class="menugen" ><a href="/browse">Buscar</a></li><li  class="menugen" ><a href="/videos">Videos</a></li><li  class="menugen" ><a href="/blogs">Blogs</a></li><li  class="menugen" ><a href="/photos">Fotos</a></li><li  class="menugen" ><a href="/mobile">Movil</a></li><li  class="menuon" ><a href="/test">Chat</a></li></ul>
</
div>

</
div>
</
div
Son muchos los enlaces que tengo,
En la web la gente se registra y suben cosas
¿como hago para que todos esos enlaces esten amigables?
__________________
chatdelmundo.es
  #11 (permalink)  
Antiguo 11/05/2013, 16:57
Avatar de ChatDelMundo  
Fecha de Ingreso: abril-2013
Mensajes: 98
Antigüedad: 11 años
Puntos: 1
Respuesta: Como dejo urls amigables

Cita:
Iniciado por bulter Ver Mensaje
(3 mins. latter) No se si es la mejor forma, pero es la mejor que se me ocurre sin tocar mod_Rewrite

En que parte coloco ese codigo para que funcione?
__________________
chatdelmundo.es
  #12 (permalink)  
Antiguo 11/05/2013, 17:47
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Como dejo urls amigables

Cita:
Iniciado por ChatDelMundo Ver Mensaje
En el archivo boot.inc.php sale asi el menu:

Código PHP:
// menu
if (!strlen($parr[1]))
    
$current_menu_path $parr[0];
else
    
$current_menu_path $parr[0].'/'.$parr[1];
$menu_items = array();
$res sql_query("select * from ".tb()."menu order by weight ASC");
while (
$row sql_fetch_array($res)) {
    
$row['allowed_roles'] = explode(',',$row['allowed_roles']);
    
$menu_items[$row['path']] = $row;
    if (
$row['protected'] && !allow_access($row['allowed_roles'])) {
        continue;
    }
    if (
$row['type'] == 'personal' && $row['actived']) {
        
$personal_menu[] = $row;
    }
    elseif (
$row['type'] == 'community' && $row['actived']) {
        
$community_menu[] = $row;
    }
    elseif (
$row['type'] == 'admin' && $row['actived']) {
        
$admin_menu[] = $row;
    }
    elseif (
$row['type'] == 'tab') {
        
$all_tab_menu[] = $row;
    }
}
if (
strlen($menu_items[$current_menu_path]['parent'])) {
    
$top_menu_path $menu_items[$current_menu_path]['parent'];
}
else {
    
$top_menu_path $current_menu_path;
}
if (
strlen($menu_items[$current_menu_path]['name'])) {
    
set_title(t($menu_items[$current_menu_path]['name']));
}
if (
strlen($menu_items[$top_menu_path]['name'])) {
    
$top_title t($menu_items[$top_menu_path]['name']);
}
if (
is_array($all_tab_menu)) {
    foreach (
$all_tab_menu as $arr) {
        if (
$arr['parent'] == $top_menu_path) {
            
$tab_menu[] = $arr;
        }
    }
}

$hide_ad_roles explode('|',get_gvar('hide_ad_roles'));
if (
is_array($hide_ad_roles)) {
    foreach (
$hide_ad_roles as $role) {
        if (
in_array($role$client['roles'])) {
            
$config['hide_ad'] = 1;
        }
    }
}

$nav[] = url('home','Home');
require_once 
'./includes/libs/apps.inc.php'
En el archivo page.tpl.php sale asi:

Código PHP:
<div id="jcow_community_menu">
<ul class="menu">
<?php
echo '<li '.check_menu_on('home/index').'>'.url(uhome(),t('Home')).'</li>';
if (
is_array($community_menu)) {
    foreach (
$community_menu as $item) {
        echo 
'<li '.check_menu_on($item['path']).'>'.url($item['path'],t($item['name'])).'</li>';
    }
}
?>
</ul>
</div>

</div>
</div>
Al editar el En el archivo page.tpl.php me funciona si hago esto:
Código PHP:
<div id="jcow_community_menu">
<
ul class="menu">
<
li  class="menugen" ><a href="http://chatdelmundo.com.es">Inicio</a></li><li  class="menugen" ><a href="/pages">Páginas</a></li><li  class="menugen" ><a href="/feed">Noticias</a></li><li  class="menugen" ><a href="/events">Eventos</a></li><li  class="menugen" ><a href="/browse">Buscar</a></li><li  class="menugen" ><a href="/videos">Videos</a></li><li  class="menugen" ><a href="/blogs">Blogs</a></li><li  class="menugen" ><a href="/photos">Fotos</a></li><li  class="menugen" ><a href="/mobile">Movil</a></li><li  class="menuon" ><a href="/test">Chat</a></li></ul>
</
div>

</
div>
</
div
Son muchos los enlaces que tengo,
En la web la gente se registra y suben cosas
¿como hago para que todos esos enlaces esten amigables?
Lo mismo que te han dicho, tienes que hace el cambio MANUALMENTE, no hay forma de que automáticamente sin tocar código se cambien, ahora, en el código que has mostrado deberías buscar donde esta definida la función url(), ya que se ve que hay es donde se generan los links...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #13 (permalink)  
Antiguo 11/05/2013, 17:53
Avatar de bulter  
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 16 años, 3 meses
Puntos: 20
Respuesta: Como dejo urls amigables

... Olvida, con el ejemplo que te di te vas a liar mas ....
Una cosa leíste algo sobre mod_rewrite ?
Si es que si , creo que esto te servira:

Código:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^/([^\.]+)?$ /index.php?p=$1 [QSA]
Creo que hara exactamente lo que quieres
  #14 (permalink)  
Antiguo 11/05/2013, 18:13
Avatar de ChatDelMundo  
Fecha de Ingreso: abril-2013
Mensajes: 98
Antigüedad: 11 años
Puntos: 1
Respuesta: Como dejo urls amigables

Cita:
Iniciado por bulter Ver Mensaje
... Olvida, con el ejemplo que te di te vas a liar mas ....
Una cosa leíste algo sobre mod_rewrite ?
Si es que si , creo que esto te servira:

Código:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^/([^\.]+)?$ /index.php?p=$1 [QSA]
Creo que hara exactamente lo que quieres
Ya lo puede arreglar, muchas gracias por su apoyo !

En mi archivo config.php lo que esta en negrilla tenia que quitarlo:

Cita:
$uhome = 'http://chatdelmundo.com.es';
$flvtool2Path = '/usr/bin/flvtool2';
$ffmpegPath='/usr/local/bin/ffmpeg';
$var_cache_live = 3600; // seconds
$ubase = $uhome.'/index.php?p=';
//$ubase = $uhome.'/';
$num_per_page = 12;
$sid = 'jcow';
$table_prefix = 'jcow_';
$timezone = -8;
$settings = array(
Solo tenia que dejar
Código PHP:
//$ubase = $uhome.'/'; 
ya todos los enlaces estan amigables para los motores de busqueda y entendibles para el usuario
__________________
chatdelmundo.es

Etiquetas: amigables, urls
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 01:44.