Pular a navegação

Este é o fórum de suporte técnico para o WPML — o plugin de WordPress multilíngue.

Todos podem ler, mas apenas clientes do WPML podem postar aqui. A equipe do WPML responde no fórum 6 dias por semana, 22 horas por dia.

Nenhum atendente de suporte está disponível para trabalhar hoje no fórum Portuguese. Fique à vontade para abrir tickets e iremos tratar deles assim que estivermos online. Obrigado pela compreensão.

Marcado: ,

Este tópico contém resposta, tem 2 vozes.

Última atualização: Mateus Getulio 1 ano, 6 mes atrás.

Assistido por: Mateus Getulio.

Autor Posts
setembro 30, 2022 em 10:55 am #12156387

Rafael Viana

Olá, está a acontecer algo muito estranho no meu site.

De vez em quando o site fica em baixo com o erro "500 internal server error". A primeira coisa que faço é repor o ficheiro htaccess para isto:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . / [L]
</IfModule>
# END WordPress

Passado alguns dias, volta a dar o mesmo erro, site em baixo... e vejo que o htacess foi modificado para isto:

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /es/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /es/index.php [L]
</IfModule>

# END WordPress

Comparando os dois ficheiros ve-se que foi adicionado o diretorio /es/ no url

No meu site tenho os seguintes idiomas:

português (idioma) padrão: /
inglês: /en/
espanhol: /es/
alemão: /de/

Podem-me ajudar a perceber se o problema está relacionado com o WPML?

setembro 30, 2022 em 6:11 pm #12158687

Mateus Getulio
Supporter

Idiomas: Inglês (English ) Português (Português )

Fuso horário: America/Sao_Paulo (GMT-03:00)

Olá,

Obrigado por contatar nosso fórum de suporte!

Em alguns casos, o .htacess pode ser substituído pela pasta do idioma, como ocorreu em seu website. No entanto, esse problema não é causado pelo WPML.

O problema na verdade vem de certos plugins de terceiros que chamam a função 'flush_rewrite_rules(true)' com muita frequência. Isso faz com que o WordPress sobrescreva .htaccess.

No entanto, em alguns casos, isso acontece com tanta frequência, às vezes até em todas as solicitações de página, que é chamado durante a navegação no front-end em outro idioma.

Quando isso acontece, o WPML segue em frente e adiciona a pasta de idioma ao home_url como de costume. Isso, no entanto, resulta em um RewriteBase incorreto em .htaccess e acaba quebrando o front-end.

A correção adequada é que os referidos plugins acionem as regras de reescrita apenas uma vez. No entanto, também podemos evitar que a pasta de idioma seja adicionada ao WPML. Como solução temporária, você pode adicionar as seguintes linhas ao functions.php do seu tema:

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;
}

Deverá estar resolvido após esta mudança. Aqui está a nossa página de errata relacionada à esse problema: https://wpml.org/errata/htaccess-is-rewritten-with-language-folder/

Por favor teste a solução alternativa acima e nos conte dos resultados. Aguardo seu retorno!

Grato,
Mateus.

This ticket is now closed. If you're a WPML client and need related help, please open a new support ticket.