Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617

    Capire e riprodurre il sistema di mod rewrite di wordpress !

    Ciao raga, stò sviluppando un mio personalissimo cms per un sitariello. Non essendo un lavoro pagato ho pensato di togliermi qualche cruccio facendo le cose a manina.

    Mi trovo davanti al dilemma su come far funzionare dinamicamente il mod rewrite. Essendo una cosa ampiamente implementata nei più famosi CMS ho pensato di prendere spunto dal più famoso e cioè da wordpress.

    Chiaramente la prima cosa che ho fatto sono andato a spulciarmi la documentazione e l'htaccess generato quando attivi la funzione nel backend. Ho compreso molte cose ma ancora mi sfuggono particolari importanti.

    Ho capito che ogni volta che salviamo un post o una pagina durante il salvataggio vengono salvati nel database l'url naturale del post/pagina "guid" e il nome del post senza spazi ne caratteri particolari "post-name" .

    Ho compreso che l'htaccess non fa altro che (ovviamente spiegato in soldonissimi), prendere l'url richiesto dall'utente (es: erl.it/ciao) e invece di farmi uscire un errore gigante 404 mi riporta all'index.php.

    Detto questo però non riesco a proseguire nella mia analisi e quindi a capire per poi riprodurre.

    Mi domando: quando scrivo nell'url url.it/ciao o url.it/?p=1 finisco sempre allo stesso post o pagina ma come fa wordpress ad ottenere questa cosa?

    Mi dareste una mano a comprendere?

    Grazie in anticipo.

    PS: Chiarametne sono aperto a soluzioni alternative, io cerco di capire la logica di wordpress pensando che sia più semplice e soprattutto più corretta però sono aperto a sistemi diversi da poter riprodurre e implementare.

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    34
    Ciao, da quello che ho capito il file .htaccess reindirizza sempre al file index.php.

    L'indirizzo richiesto è comunque presente all'interno di $_SERVER['REQUEST_URI'];

    Quindi è necessaria una funzione che traduca la stringa che rappresenta la richiesta in query al database, per poi caricare il template corretto.

    In wordpress è tutto nel metodo parse_request()
    che trovi nel file /wp-includes/class-wp.php

    In particolare viene effettuato un controllo per verificare se nell'indirizzo inserito è presente un pattern che corrisponde a qualche rewrite rules

    codice:
    global $wp_rewrite;
    print_r($wp_rewrite);
    Se trova una corrispondenza setta le query vars

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Ok, più o meno (tu sei stato più preciso) ero arrivato a questa conclusione ma mi sorgono alcune domande.

    Se ho capito bene avendo questa stringa http://www.url.it/ciao wordpress o il cms che andrei a implementare, per prima cosa dovrebbe redirigermi all'index.php e mostrarmi l'url che ho richiesto (fin qui l'ho anche fatto), nel frattempo deve analizzare il database alla ricerca di un record (in wordpress cercheremmo nella tabella wp-posts) che abbia salvato il titolo del post nel formato user friendly nel nostro caso "ciao".

    Ho notato però che wordpress se ha attivo il permalink cambia l'url anche se gli passi la stringa predefinita, mi spiego.
    Se ho attivato il permalink e richiedo url.it/?p=1 mi viene comunque visualizzato l'articolo con id 1 e la stringa dell'url viene cambiata in url.it/titolo.dell-articolo. Questo come lo si ottiene?Ho pensato che una volta capito dalla funzione che l'url è classico e non user friendly si possa andare a ricostruire l'url riscritto e fare un redirect richiedendo quest'ultimo (forse mi sono spiegato una ciofeca, scusa).

    Grazie in anticipo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    34
    seguendo un po' il codice php ho visto che la conversione dell'indirizzo dipende
    dalla funzione redirect_canonical() (file wp-includes/canonical.php)
    che è collegata all'hook do_action('template_redirect'); (file wp-includes/template-loader.php)
    prova a vedere cosa fa di preciso

  5. #5
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Segnalazione molto utile, soprattutto quando si fanno le cose a manina!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.