Htaccess viene modificato con la cartella della lingua

Htaccess Viene Modificato Con La Cartella Della Lingua

Cosa succede

In alcuni casi, il file .htacess viene sovrascritto con la cartella della lingua e appare in questo modo:

RewriteEngine on
RewriteBase /fr/
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /fr/index.php [L]

L’htaccess corretto stadard è questo:

RewriteEngine on
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php[L]

Come puoi notare la cartella della lingua non c’è e non deve essere presente.

Si tratta di un bug perchè il sito funziona solo nella lingua francese e non nelle altre lingue.

Accade perchè la convivenza tra plugin non è sempre pacifica e soprattutto utilizzando WPML per gestire le traduzioni in lingua potrebbe succedere una cosa del genere.

Il problema in realtà deriva da alcuni plugin di terze parti che chiamano troppo spesso la funzione flush_rewrite_rules(true) . Ciò fa sì che WordPress sovrascriva .htaccess . Tuttavia, in alcuni casi, ciò accade così spesso, a volte anche ad ogni richiesta di pagina, che viene richiamato durante la navigazione nel front-end in un’altra lingua.

Quando ciò accade, WPML procede e aggiunge la cartella della lingua a home_url come al solito. Ciò, tuttavia, si traduce in una RewriteBase errata in .htaccess e finisce per danneggiare il front-end.

Soluzione

La soluzione corretta è che il plug-in di terze parti elimini le regole di riscrittura solo una volta. Ciò comporterebbe prestazioni migliori dei plugin in questione perché lo svuotamento delle regole di riscrittura è un’operazione costosa per il server e dovrebbe essere prestata particolare attenzione.

Possiamo però anche evitare che la cartella della lingua venga aggiunta in WPML. Come soluzione temporanea puoi aggiungere le seguenti righe al file functions.php del tuo tema:

Soluzione temporanea per evitare l’aggiunta della cartella della lingua:

add_filter('mod_rewrite_rules', 'fix_rewritebase');
function fix_rewritebase($rules){
    $home_root = parse_url(home_url());
    if ( isset( $home_root['path'] ) ) {
        $home_root = trailingslashit($home_root['path']);
    } else {
        $home_root = '/';
    }
 
    $wpml_root = parse_url(get_option('home'));
    if ( isset( $wpml_root['path'] ) ) {
        $wpml_root = trailingslashit($wpml_root['path']);
    } else {
        $wpml_root = '/';
    }
 
    $rules = str_replace("RewriteBase $home_root", "RewriteBase $wpml_root", $rules);
    $rules = str_replace("RewriteRule . $home_root", "RewriteRule . $wpml_root", $rules);
 
    return $rules;
}

Esistono molti casi diversi a seconda del plugin che stai utilizzando, quindi se hai bisogno di aiuto non esitare a contattarmi.

Hai un problema con il web?

Il tuo sito internet non vuole funzionare?

Vuoi rinnovarlo o sistemarlo?

Hai un’idea di integrazione ma non sai se è possibile realizzarla o meno?

    Accetto la Privacy Policy
    Autorizzo al trattamento dei miei dati personali, per ricevere le informazioni richieste attraverso questo modulo di contatto. I dati da te inseriti attraverso questo modulo verranno utilizzati solo per essere da me ricontattato.

    Recensioni

    Scrivimi una recensione

    Questo QR Code ti permette di lasciarmi una recensione in maniera facile e veloce.

    Altrimenti qui sotto ti lascio un bottone, con il quale puoi lasciare la recensione direttamente su Google My Business.

    Lascia una recensione su Google