Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Sottocartella lingua con htaccess

    Buondì. Ennesima rogna htaccess dalla quale però stavolta non riesco davvero a cavarne un tappo dalla bottiglia.
    Sto creando il mio sito personale e per "colpa" di google non posso settare la lingua del sito tramite cookie se no perdo una delle due lingue e vengo indicizzato male. Visto che i nomi delle pagine sarebbero uguali in ogni lingua (non bioit o bioen) ho cercato un'alternativa.
    L'idea è quella di aggiungere, alla Apple, la dicitura /it/ o /en/ tra il dominio e il nome delle pagine. Linguaggio PHP.
    Esempio pratico:
    Codice PHP:
    // pagina bio.php modificata con rewrite
    [url]www.miosito.com/bio[/url]

    //risultato che vorrei ottenere per aggiungere la lingua
    [url]www.miosito.com/it/bio[/url]
    //oppure
    [url]www.miosito.com/en/bio[/url
    Chiaramente le lingue vorrei fossero aggiungibili a piacimento.

    Dove sta il problema? non ho una cartella per ogni lingua ovviamente. La pagina me la carica ma immagini e css non me li calcola minimamente.
    Questa è la regola:

    codice:
    RewriteRule ^([^/]+)/bio$ bio.php?lingua=$1
    Non ho idea di come fare. Forse aggiungendo regole anche per css e immagini ma non saprei come agire.
    Qualcuno sa aprirmi la mente? Grazie anticipato
    Ce l'ho fatta! - ItalianPixel -

  2. #2
    Ho trovato una cosa di questo tipo:

    codice:
    RewriteRule ^../(.*)$ $1 [L]
    ma così facendo non passa la variabile lingua. Aiutino?
    Ce l'ho fatta! - ItalianPixel -

  3. #3
    Che coincidenza. Proprio ieri ho iniziato a fare la stessa identica cosa. Mi sembra di averlo scritto io questo post Per far credere al browser che /en/ e /it/ non sono una directory io uso questo
    codice:
    RewriteRule ^it/(.+).php$ $1.php [L] 
    RewriteRule ^en/(.+).php$ $1.php [L]
    In questo modo quando visiti example.com/en/test.php il realtà sei su example.com/test.php.

    Ora però ti anticipo un problema che da ieri mi sta facendo diventare matto. In pratica adesso sia io che te stiamo facendo questo casino per evitare la duplicazione dei contenuti e lasciare a casa i cookie. Peccato che però siamo punto e a capo. Ti anticipo il nuovo problema che avrai e che io già affronto da qualche ora senza successo. Adesso la nostra pagina test.php sarà accessibile da 3 diversi link:
    • en/test.php (in inglese)
    • it/test.php (in italiano)
    • test.php (senza lingua)

    E' ovvio che dobbiamo reindirizzare test.php ad una lingua default tra le due. In questo modo test.php aprirà en/test.php. Il punto è io non riesco a creare questo maledetto redirect.

  4. #4
    Guarda lascia stare. htaccess è una delle cose più belle e allo stesso tempo più incasinate mai create!
    In realtà per il problema dell'indicizzazione a più lingue si può lasciare le tre pagine e un semplice controllo che se non trova la lingua selezionata (test.php) setta una lingua di base, senza redirect. Quindi se il tuo sito sarà in italiano andrà su test.php e caricherà i testi in italiano. Se cambi lingua allora cambia i contenuti e aggiunge /en/ all'indirizzo.
    Ho pensato anche di salvare un cookie con l'ultima lingua settata, così se un utente si trova nel .com, ad esempio, del sito senza scelta lingua, se è settata una lingua nei cookie (quindi ha già visitato il sito) prendo quella lingua come lingua base e faccio un redirect, così a google non cambia nulla mentre ad un utente assiduo può facilitare le cose.

    Apple invece se ne infischia e se vai sul .com non ti rimanda al .com/it/

    Sono combattuto sul da farsi. Magari qualcuno ne sa qualcosa.
    Ce l'ho fatta! - ItalianPixel -

  5. #5
    Ma soprattutto: come fai a capire in che lingua sei? Come la recuperi dall'url?
    Ce l'ho fatta! - ItalianPixel -

  6. #6
    Anche io in questi due giorni ho messo casa sul sito apple nella pagina switch language. Nel modo alla apple che dici tu la cosa è possibile ma in questo caso avresti:

    test.php (in italiano)
    it/test.php (in italiano)
    en/test.php (in inglese)

    Risultato: duplicazione contenuto per l'it. Alla apple pare non gliene freghi ma a me personalmente si

    Edit: in merito al secondo post io mi ricavo la lingua dall'url con $_SERVER['REQUEST_URI'] e 2 explode (array[0] la lingua, array[1] la pagina). Non so se sia il modo più semplice ma funziona ed è breve.

  7. #7
    Beh, se il tuo problema è quello fatti un redirect permanente alla tua lingua base, ad esempio /it/ o un controllo con php. Se non è settata la variabile lingua (e siamo sempre lì, come settarla con htaccess e recuperarla?) allora fai un redirect alla stessa pagina ma aggiungendo l'/it/.
    A me non è che importi se è doppio. Un'altra soluzione è quella di usare il dominio base per una lingua, come appunto fa apple. Se provi ad aggiungere /us/ vedrai che non esiste perché è il .com .
    Io ho un .com e lo vorrei in italiano e la cosa mi incasina un pò ma posso tenere il .com come italiano e aggiungere /en/ in quella inglese. Per tornare all'italiano tolgo la lingua nell'url.
    Ce l'ho fatta! - ItalianPixel -

  8. #8
    Allora, ho pagliativamente trovato un metodo.
    Per accettare le lingue come variabile lingua a prefisso del nome della pagina ho usato nell'htaccess:
    codice:
    RewriteEngine On
    
    RewriteRule ^([a-z]{2}(-[A-Z]{2})?)/(.*) $3?lang=$1 [L,QSA]
    Ma se provo a passare qualche altro valore tramite get non viene visto. Però funziona, male ma funziona.

    Per la scelta lingua invece ho tenuto il .com come lingua italiana e l'aggiunta di en/ come inglese. Alle bandierine di scelta lingua ho messo:
    Codice PHP:
         [url="<?=(isset($_GET['lang'])?"]nomepagina():$pagine->nomepagina())?>">[img]img/it.gif[/img][/url]
         
         [
    url="<?=(isset($_GET['lang'])?"]nomepagina():"en/".$pagine->nomepagina())?>">[img]img/en.gif[/img][/url]</div>
    Ho creato una classe che mi estrae il basename della request_uri e mi da il nome della pagina modificato con l'url_rewrite di htaccess (quindi mi scrive bio invece che bio.php come farebbe php_self).
    Se la lang (come da regola htaccess) è settata allora torno indietro di cartella e, in caso di italiano, ci metto il nome della pagina, in caso di inglese riaggiungo la sottocartella en/. Perché tutto questo? Perché se uno cambia il nome della sottocartella in ad esempio fr/, torno indietro e riscrivo il tutto e se un utente riclicca sull'inglese prima resetta tutto e poi lo riaggiunge.

    Per aggiungere il file lingua ho fatto così:
    Codice PHP:
    //includo il file di lingua adeguato
    $lingue=array("it","en"); //lingue disponibili
    if(!isset($_GET['lang'])){
        
    $linguaget='it'//lingua di default se vuoto
    }else{
        
    $linguaget=$_GET['lang'];
    }
    if(!
    in_array($linguaget,$lingue)){
        
    $linguaget='it'//lingua di default se non in array
    }
    include_once 
    "_include/lingue/".$linguaget.".php"
    Un array con le lingue disponibili mi assicura che se anche scrivono altre lingue venga caricato sempre il file italiano, a meno che la lingua non sia compresa nell'array stesso. Se non c'è lingua allora carico l'italiano (lingua di default). Alla fine aggiungo il file di lingua.

    Vi prego se c'è un modo più semplice ditemelo! E se non c'è almeno ditemi come passare più valori tramite get, perché così non funziona!

    Giorni interi di lavoro ma almeno posso andare avanti...
    Ce l'ho fatta! - ItalianPixel -

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 © 2020 vBulletin Solutions, Inc. All rights reserved.