• User Attivo

    Aiuto creazione regole .htaccess!! Serve una guida!

    Ciao a tutti,

    mi servirebbe una guida dove è spiegato chiaramente come creare il file .htaccess e tutte le regole che supporta.

    devo creare il file con queste impostazioni ma non ci riesco vedendo le guide che ho trovato nel web... vi chiedo gentilmente se avete un manuale SERIO o un sito davvero attendibile.

    Il mio sito è attualmente strutturato cosi:

    www.sito.com/categoria1/articolo.php?id=1
    www.sito.com/categoria1/articolo.php?id=2
    ........
    www.sito.com/categoria1/articolo.php?id=100

    www.sito.com/categoria2/articolo.php?id=1
    www.sito.com/categoria2/articolo.php?id=2
    ........
    www.sito.com/categoria2/articolo.php?id=100

    categoria1 e categoria2 sono valori che prende da una variabile, supponiamo $categoria1 e $categoria2

    articolo.php?id=1 deve diventare "simonecasa.html"
    articolo.php?id=2 deve diventare "paoloamico.html"
    .....
    dove "simonecasa" e "paoloamico" sono valori della variabile richiamata nella pagina che varia da pagina a pagina a seconda dell'ID

    mi aiutereste a creare il file HTACCESS? ho provato a crearla leggendo da queste fonti:

    *************************/forum/t104-Guida-Mod_rewrite-con-esempi-minitutorial.html
    http://www.tuttowebmaster.it/indicizzazione/mod_rewrite.php

    ma senza alcun risultato perchè non ci arrivo di logica evidentemente con quei pochi esempi che ho visto... per questo motivo vi chiedevo anche una guida completa...

    cmq se mi aiutate a creare il .HTACCESS come minimo vi offro un backlink da 3 miei siti su server diversi...

    Grazie ragazzi è fondamentale per me... ciao 🙂


  • Super User

    una regola che faccia una riscrittura da
    ciaopippo.htm a pagina.php?id=1
    non esiste

    puoi fare una regola che traduca
    ciaopippo.htm in pagina.php?id=ciaopippo

    e la fai in questo modo:
    RewriteRule ^(.*).htm$ pagina.php?id=$1

    altrimenti (cosa che consiglio) è fare
    ciaopippo_1.htm in pagina.php?id=1

    dove 1 ovviamente è l'id
    e la regola è:
    RewriteRule ^(.*)_([0-9]+).htm$ pagina.php?id=$2

    :ciauz:


  • Super User

    potrebbe fare che il sistema genera url del tipo 1-ciapippo.htm e con il rewrite prende in considerazione solo l'1


  • User Attivo

    Ciao ragazzi grazie per l'aiuto...

    pero penso che si possa fare che articolo.php?id=1 deve diventare "simonecasa.html"

    perchè il modrewrite di wordpress ci riesce e non vedo perchè non dovrei riuscirci a farlo io....

    il nome del file è per esempio il titolo dell'articolo e lo prende da database... scusate se non ve lo ho detto....

    quindi si puo fare....
    mi indichereste come?


  • User Attivo

    Mi spiego meglio....

    ho questa pagina: www.sito.xxx/pagina.php?id=1

    voglio che diventi www.sito.xxx/casa-di-goldenboy/
    dove "casa-di-goldenboy" è il TITLE della pagina e che è memorizzato in una variabile $titolo che corrisponde all'ID=1

    ora... come devo fare per dire all'htaccess che mi deve creare questa pagina:
    www.sito.xxx/casa-di-goldenboy/
    sapendo che "casa-di-goldenboy" è il titolo della pagina memorizzata in una variabile?

    spero di essere stato più chiaro...
    Grazie


  • Super User

    @goldenboy said:

    Mi spiego meglio....

    ho questa pagina: www.sito.xxx/pagina.php?id=1

    voglio che diventi www.sito.xxx/casa-di-goldenboy/
    dove "casa-di-goldenboy" è il TITLE della pagina e che è memorizzato in una variabile $titolo che corrisponde all'ID=1

    ora... come devo fare per dire all'htaccess che mi deve creare questa pagina:
    www.sito.xxx/casa-di-goldenboy/
    sapendo che "casa-di-goldenboy" è il titolo della pagina memorizzata in una variabile?

    spero di essere stato più chiaro...
    Grazie

    beh ma l'url lo generi tu da php o asp come www.sito.xxx/casa-di-goldenboy/ e fino li nessun problema

    dovrai modificare l'index per far si che via $_GET riceva un campo a tua scelta, chiamiamolo titolo e vada a trovare l'articolo e popoli la pagina

    quindi quando tu metti www.sito.xxx/casa-di-goldenboy/ lui con htaccess rimanda a www.sito.xxx/index.php?titolo=casa-di-goldenboy

    quindi dovrebbe essere

    RewriteRule ^(.*)/$ /index.php?titolo=$1

    ps. ricordati che dovrai far si che se ci sono 2 titoli uguali uno venga registrato con non so titolo1 o titolo2 etc etc


  • User Attivo

    faccio delle prove e ti faccio sapere

    grazie mille per l'aiuto 🙂


  • User Attivo

    scusa però....

    wordpress genera di base le pagine cosi www.wordpress.org/p.php?id=1

    e però, attivando i permalink e inserendo nell'articolo il titolo della pagina, utilizza quest'ultimo come regola per l'htaccess... la stessa cosa che voglio fare io..

    pero non mi sembra che wordpress genera www.sito.xxx/index.php?titolo=casa-di-goldenboy
    come mi hai detto tu....

    quindi come faccio?
    non posso modificare le pagine come mi hai detto tu in
    www.sito.xxx/index.php?titolo=casa-di-goldenboy

    ormai sono generate cosi
    www.sito.xxx/pagina.php?id=1


  • Super User

    si ma wp non può sicuramente da domain.com/titolo/ con una rewriterule generare l'id e farlo diventare domain.com/index.php?id= 🙂

    deve usare il metodo di cui sopra.... lui prende la var $postname e riscrive l'url domain.com/postname/.

    il rewrite farà si che postname venga inviato in modo giusto via get e lui troverà l'articolo....

    tornando al caso in itinere, se adesso funziona con l'id vuol dire che hai un controllo su $_GET['id']

    ora se tu metti che se isset($_GET['titolo']) esclude $_GET['id']*e la chiamata sul db per la ricerca ed effettua invece una chiamat sul db con ricerca con il WHERE puntato al titolo ottieni quello che vuoi tu.


  • Super User

    esempio pratico:

    http://gh3.altervista.org/?p=123
    http://gh3.altervista.org/?name=wordpress-plugin

    danno la stessa pagina solo che uno chiama con l'id ( e non lo puoi usare nel tuo caso ) mentre la seconda con il titolo ( è il tuo caso )


  • User Attivo

    @gh3 said:

    si ma wp non può sicuramente da domain.com/titolo/ con una rewriterule generare l'id e farlo diventare domain.com/index.php?id= 🙂

    ma certo! è normale! credo che tu non abbia capito nulla di quello che ti sto chiedendo..

    infatti quello che ti sto chiedendo io è quello che hai scritto dopo tu:
    @gh3 said:

    deve usare il metodo di cui sopra.... lui prende la var $postname e riscrive l'url domain.com/postname/.

    @gh3 said:

    tornando al caso in itinere, se adesso funziona con l'id vuol dire che hai un controllo su $_GET['id']

    si l'id mi serve per creare la pagina con gli imput che gli do da un pannello di controllo

    @gh3 said:

    ora se tu metti che se isset($_GET['titolo']) esclude $_GET['id']*e la chiamata sul db per la ricerca ed effettua invece una chiamat sul db con ricerca con il WHERE puntato al titolo ottieni quello che vuoi tu.

    vedi che non hai capito nulla?
    nella pagina www.sito.xxx/pagina.php?id=1 ci sarà una variabile $titolo che sarà "titolo-della-pagina" ... adesso questo benedetto titolo deve apparire nella url che mi crea il .htaccess e sarà
    www.sito.xxx/titolo-dlla-pagina/

    ho detto che la ricerca la può fare SOLO e UNICAMENTE con l'id=1 quindi non posso far fare la ricerca nel DB con il titolo ($titolo)...

    se hai ben inteso quello che ti chiedo puoi rispondere.. ma se non hai capito qualcosa chiedimi 🙂 🙂


  • Super User

    e allora non lo puoi fare...

    dato che tu dovresti inviare un url con il titolo e il tuo software aspetta un id.

    sarebbe come fare una ricerca di mele in un camion di pere.

    quello che ti ho spiegato io è come funziona il rewriterule per i permalink di wordpress.

    cmq l'htaccess non è lui a scrivere gli indirizzi, lui si occupa solo del redirect.

    tutto il resto va gestito a livello di script php.

    ora per puro scrupolo, la situazione è questa giusto?

    Attuale configurazione

    index.php?id=1 -> ti manda all'articolo 1

    tu vuoi tramite rewrite rule avere http://domain/titolo-articolo/ -> index.php?id=1
    http://domain/altro-titolo-articolo/ -> index.php?id=2

    etc etc giusto?

    Se si devi fare come detto sopra inserendo una nuova var in index.php oppure fare un controllo su $_GET['id'] del tipo is_numeric e gestirla come attualmente mentre se ritorna false fare per forza una ricerca per titolo, non capisco perchè poi non sia possibile fare una ricerca per titolo...
    basta modificare i sorgenti, a meno che non siano criptati...

    if(!is_numeric($_GET['id']) $sql = "SELECT * FROM tabella WHERE titolo = '."$_GET['id']."'";
    else $sql = "SELECT * FROM tabella WHERE id = '."$_GET['id']."'";


  • User Attivo

    yes! finalmente mi hai capito 🙂 è stata dura però 😄

    hai idea che cosa significa fare la ricerca per titolo?
    te lo dico io... che i risultati li ho dopo 2 anni che hai fatto la ricerca 😄

    non capisco xkè non si puo fare quando WORDPRESS ci riesce benissimo...
    che si può fare si può fare... devo solo trovare il modo... tutto si puo fare!

    se puoi dirmi la fonte dei tuoi saperi sull'htaccess ti ringrazio cosi mi faccio una bella cultura anche io e vedrai che la soluzione la troviamo 🙂


  • Super User

    no veramente io avevo capito dall'inizio... 😐

    cmq ti ho anche già detto come fa wp a recuperare le info, sia usando il titolo che l'id.

    prendo direttamente il codice sorgente da wp a questo punto...

    [php]
    function single_post_title($prefix = '', $display = true) {
    global $wpdb;
    $p = get_query_var('p');
    $name = get_query_var('name');

    if ( intval($p) || '' != $name ) {
    	if ( !$p )
    		$p = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '$name'");
    	$post = & get_post($p);
    	$title = $post->post_title;
    	$title = apply_filters('single_post_title', $title);
    	if ( $display )
    		echo $prefix.strip_tags($title);
    	else
    		return strip_tags($title);
    }
    

    }[/php]

    questa func recupera il titolo del messaggio

    come vedi ha 2 possibili input via get ( la funzione get_query_var($var) non fa altro che ritornare il $_GET['$var'] )

    quindi può avere in input id o name ( cioè il tag riassunto, praticamente il titolo con i - al posto degli spazi )

    se ha id non fa altro che usare la func get_post($id) che ritorna le info del post.

    se ha name, deve prima recuperare l'id e lo fa con la select $p = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '$name'");

    passa quindi id get_post e via.

    praticamente come ti avevo già spiegato sopra...

    l'unico modo esistente è questo, se la ricerca per titoli ti risulta troppo lenta, beh è l'unico modo...

    più che pescare direttametne dal codice di wp non so che fare 😞


  • Super User

    hai già provato a spiare il file .htaccess di wp ?


  • Super User

    .htaccess di wp, non fa altro che rimandare qualsiasi url se non fisicamente esistente a index.php

    poi wp ha le rewriterule gestite dal sistema stesso in un apposito campo ( rewrite_rules ) della tabella di wp_options

    però l'escamotage che usa per i permalink è fare redirect in quel modo su index.php?name=titolo-della-news