/ / .htaccess поддомейни на езика засягат други правила - .htaccess, mod-rewrite, subdomain

.htaccess езиковите поддомейни засягат други правила - .htaccess, mod-rewrite, subdomain

Знам, че имаше много въпроси като този, но все още не мога да разреша проблема.

Използвам следния .htaccess код за промяна на езика:

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]

Това добавя ?language=variable в края на адреса.

Но по някаква причина останалите правила като това генерират вътрешна грешка в сървъра:

RewriteRule ^([0-9]+)/([^/]+)(|/)$ code.php?id=$1&title=$2 [L]

Прости правила (без добавяне на променливи), подобни на този работят добре:

RewriteRule ^stats(|/)$ stats.php [L]

Надявам се, че някой ще успее да ми каже къде е проблемът.

Отговори:

1 за отговор № 1

Трябва да включите a QSA или езиковият ви парам се изгуби:

RewriteRule ^([0-9]+)/([^/]+)(|/)$ code.php?id=$1&title=$2 [L,QSA]

В това правило няма нищо лошо, грешката 500 може да бъде причинена от code.php


Изглежда, че езиковите правила, които имате, е това, което е циклично, освен добавянето на a QSA към другите ви правила, които добавят към низа на заявката, трябва да изключите добавянето на „language =“, когато вече го имате. Така че над последното правило за език, добавете това:

RewriteCond %{QUERY_STRING} !language

Така че да изглежда така:

RewriteCond %{QUERY_STRING} !language
# WHATEVER THE LANGUAGE ADD IT TO THE URI:
RewriteRule (.*) $1?language=%{ENV:LANGUAGE} [QSA]