/ / subdomínios de linguagem .htaccess afetam outras regras - .htaccess, mod-rewrite, subdomínio

Subdomínios da linguagem .htaccess afetam outras regras - .htaccess, mod-rewrite, subdomain

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 № 1

Você 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]