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.
Lascia un Commento
Vuoi partecipare alla discussione?Sentitevi liberi di contribuire!