Sei que houve muitas perguntas como essa, mas ainda não consigo resolver o problema.
Estou usando o seguinte código .htaccess para alterar o idioma:
RewriteCond %{HTTP_HOST} ^(en|us).domain.com$
# Create an environment variable to remember the language:
RewriteRule (.*) - [QSA,E=LANGUAGE:%1]
# Now check if the LANGUAGE is empty (= doesn"t exist)
RewriteCond %{ENV:LANGUAGE} ^$
# If so, create the default language (=en):
RewriteRule (.*) - [QSA,E=LANGUAGE:en]
# WHATEVER THE LANGUAGE ADD IT TO THE URI:
RewriteRule (.*) $1?language=%{ENV:LANGUAGE} [QSA]
Isso adiciona ?language=variable
no final do endereço.
Mas, por algum motivo, o resto das regras como esta geram Erro interno do servidor:
RewriteRule ^([0-9]+)/([^/]+)(|/)$ code.php?id=$1&title=$2 [L]
Regras simples (sem adicionar variáveis) semelhantes a esta funcionam bem:
RewriteRule ^stats(|/)$ stats.php [L]
Espero que alguém possa me dizer onde está o problema.
Respostas:
1 para resposta № 1Você precisa incluir um QSA
ou seu parâmetro de idioma se perderá:
RewriteRule ^([0-9]+)/([^/]+)(|/)$ code.php?id=$1&title=$2 [L,QSA]
Não há nada de errado com essa regra, o erro 500 pode ser causado por code.php
Parece que as regras de linguagem que você tem é o que está em loop, além de adicionar um QSA
às suas outras regras que adicionam à string de consulta, você precisa excluir o acréscimo de "idioma =" quando já o tiver. Portanto, acima da última regra de idioma, adicione isto:
RewriteCond %{QUERY_STRING} !language
Para que se pareça com:
RewriteCond %{QUERY_STRING} !language
# WHATEVER THE LANGUAGE ADD IT TO THE URI:
RewriteRule (.*) $1?language=%{ENV:LANGUAGE} [QSA]