Regresar a la página ComoCrearTuWeb.com
Resultados 1 al 7 de 7

Tema: Mod_rewrite

  1. #1
    Me va gustando esto... Habitante
    Fecha de Ingreso
    19 feb, 13
    Mensajes
    47
    Poder de Reputación
    13

    Mod_rewrite

    Hola a todos de nuevas, tengo una página dinámica de donde quiero hacer url amigables para google.
    La página de destino que recoge las variables por url se llama "visualizacancionesporautor". He probado varios códigos de distintos videos/tutoriales pero no termino de comprenderlo (y menos consigo que funcione). Estoy utilizando wamp server y tengo el "tick de ok" en el rewrite_module de APACHE (por lo que entiendo que funciona, ya cambié el conf) . En cuanto a los tutoriales, todos hacen una llamada con $_GET a la variable en la página en cuestión, yo ya tengo la llamada a $_GET hecha en visualizacionesporautor:

    Código PHP:
    $autor $_GET['autor']; 
    (Tengo mucho más código, no os preocupéis;)) Y funciona correctamente porque es una página dinámica y me recoge los datos, sin errores.


    En el htaccess he probado con:

    RewriteEngine On
    RewriteRule ^visualizacancionesautor/([^/]+).html visualizacancionesautor.php?autor=$1 [L]

    También este lo he probado (entre otros tantos):
    RewriteEngine On
    RewriteBase /miproyecto/musica
    RewriteRule ^([a-zA-Z0-9]+)$ visualizacancionesautor.php?autor=$1


    Bueno, seguiré avanzando para ver cómo solucionarlo, mirare expresiones regulares y el largo etc, pero no entiendo por qué estos códigos funcionan a estas personas y a mí no. A ver si alguien me puede ayudar con el tema (porque mi intención no es ser especialista en mod rewrite) y decirme cómo hacer que cuando pincho en un link de la página "musica.php", que pasa la variable $autor por url, directamente me aparezca una url tipo:

    localhost/miproyecto/musica/autor.html

    y no:

    localhost/miproyecto/musica/visualizacancionesautor.php?autor=nombredeautor


    Un saludo y gracias de antemano!

    PD: no sabía donde poner el hilo, no hay APACHE y tampoco creo que sea de php.

  2. #2
    Me va gustando esto... Habitante
    Fecha de Ingreso
    19 feb, 13
    Mensajes
    47
    Poder de Reputación
    13
    A ver si probando con algo más sencillo lo consigo. He creado una carpeta en mi www de wamp llamada "prueba" y dos ficheros, un "envia" y otro "entrega".
    envía.php:
    Código PHP:
    <a href="entrega.php?idpage=a">envio</a
    entrega.php:
    Código PHP:
    <?php 

    $idpage 
    $_GET['idpage'];

    echo 
    "$idpage"


    ?>


    En Apache tengo lo siguiente:
    <IfModule mod_rewrite.c>
    Options +Indexes
    Options +FollowSymlinks
    RewriteEngine on
    RewriteBase /prueba/
    RewriteRule ^(.*)/(.*)/ entrega.php?idpage=$1
    </IfModule>

    También he probado con esto y nada:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    Options +FollowSymlinks
    RewriteBase /prueba/
    RewriteRule ^entrega/([^-]+)\.html$ entrega.php?idpage=$1 [QSA,L]
    </IfModule>



    Me quedo sin recursos, a ver si alguno me ayuda!
    Gracias a todos! aunque solo lo leas;)

  3. #3
    Me va gustando esto... Habitante
    Fecha de Ingreso
    19 feb, 13
    Mensajes
    47
    Poder de Reputación
    13
    No entiendo absolutamente nada xD. Acaso el htaccess debe estar en un lugar distinto? Lo estoy probando con wampserver y el htaccess lo tengo dentro de www, en la misma carpeta está la "carpeta prueba", donde están los archivos antes mencionados que estoy usando para checkear el mod_rewrite. Venga maestros del rewrite, ayudadme por favor! xD.


    "Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, admin@localhost 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."


    Se me olvidaba decir que tengo este error cuando (creo) debería de funcionar (porque no lo he podido comprobar xD). Parece que esto aparece cuando el Mod_rewrite no funciona bien, pero en mi caso ya lo probé con un ejemplo de redirección a google, por lo que funciona.
    Un saludo!
    Última edición por garsagil; 17/04/2013 a las 16:11

  4. #4
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    05 mar, 10
    Mensajes
    840
    Poder de Reputación
    22
    Hola garsagil prueba esto

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^musica/(\w+)/?$ visualizacancionesautor.php?autor=$autor [L]
    </IfModule>

    $autor o $1 dependiendo del $_GET
    Última edición por francisco1; 18/04/2013 a las 06:24

  5. #5
    Me va gustando esto... Habitante
    Fecha de Ingreso
    19 feb, 13
    Mensajes
    47
    Poder de Reputación
    13
    Muchas gracias por la respuesta francisco;). La verdad es que no me ha servido de nada! xD, pero no creo que sea porque no es adecuada, sino porque algo no estoy haciendo bien, no debo de estar aplicando el htaccess correctamente. Voy a esperar a subir la página al host que tengo y probaré el mismo código en ese momento, a ver si es una cuestión de mi ordenador y de cómo tengo configurado (o no he sabido configurar) mi wamp/ordenador.

    Aún así muchas gracias, no me había dado cuenta de usar $autor y no $1. Pensaba que $1 recogía la primera variable que aparecía en la url y la sustituía APACHE (para que veas lo novato que soy xD).

    Gracias de nuevo.
    Un saludo!
    PD: cuando tenga la solución la colgaré

  6. #6
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    05 mar, 10
    Mensajes
    840
    Poder de Reputación
    22
    Aún así muchas gracias, no me había dado cuenta de usar $autor y no $1. Pensaba que $1 recogía la primera variable que aparecía en la url y la sustituía APACHE (para que veas lo novato que soy xD).
    No ya ibas bien encaminado con lo del $1 solo te lo puse para que lo probaras de ambas formas

    asi

    autor=$autor

    y asi

    autor=$1
    Última edición por francisco1; 18/04/2013 a las 11:20

  7. #7
    Recien Llegado! Habitante
    Fecha de Ingreso
    18 nov, 08
    Mensajes
    18
    Poder de Reputación
    20
    Las urlfriendly las tienes que hacer tú, a mano o con consulta a base de datos. Te explico con tu ejemplo:

    En la página envia.php el enlace lo deberías construir así: <a href="visualizacancionesautor/ray-charles">Música de Ray Charles</a>

    Como verás, es el enlace el que lleva la dirección ya modificada. El mod_rewrite actúa a la hora de servir la página: El servidor recibe la petición de un archivo que se encuentra en la carpeta visualizacancionesautor/ y que se llama ray-charles. Evidentemente, no existe tal archivo. Por lo que cambias ese comportamiento con el mod rewrite. Le dices que cuando intente buscar en esa carpeta, no lo haga, sino que haga otra cosa. La regla sería algo así:

    #RewriteRule[espacio]expresion-regular-a-comparar[espacio]página-a-servir-si-coincide
    RewriteRule ^visualizacancionesautor/(.*)$ entrega.php?idpage=$1

    En la barra de direcciones aparecerá lo que hemos puesto en el enlace, es decir visualizacancionesautor/ray-charles, pero el servidor acudirá a otro sitio a buscar el archivo; la dirección real ha sido modificada.

    En entrega.php puedes poner <?php echo $_GET[idpage]; ?> para ver que está llegando la variable.

    En mi caso, cuando hago webs con urlfriendly, hago que todo el tráfico de las urlfriendly pase por una página a la que llamo redirect.php. Te pongo un ejemplo de mi .htaccess

    <IfModule mod_rewrite.c>
    # Activar RewriteEngine
    Options +FollowSymlinks
    RewriteEngine on
    RewriteBase /

    #Creo las reglas para la redirección

    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^(.*)? redirect.php?urlfr=$1

    </IfModule>

    Las rewritecond son líneas que le dicen que si el archivo existe en realidad, no compruebe las expresiones regulares.

Temas Similares

  1. como configurar mod_rewrite en .htaccess para php a html
    Por codomodragon en el foro Foro General
    Respuestas: 10
    Último Mensaje: 12/11/2010, 20:32

Etiquetas para este Tema

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •