2010-11-10 5 views
0

Я пытаюсь заставить язык стиля википедии работать. Так что url будет en.example.com для английского, fr.example.com для французского и т. Д. Это прекрасно работает, но я бы хотел, чтобы область администрирования всегда по умолчанию использовала базовый язык, т. Е. Не задавала переменную среды LANGUAGE. Я попытался добавить RewriteCond %{REQUEST_URI} !^admin [NC], но, похоже, это не влияет.RewriteCond, чтобы исключить каталог и его подкаталоги

Мой mod_rewrite код выглядит следующим образом:

# Handle languages 
# Picks up the language code from the browser accept-language parameter 
RewriteCond %{HTTP:Accept-Language} ^([a-z]{2}).*$ [NC] 
RewriteCond %{HTTP_HOST} !^[a-z]{2}\.[a-z]{2,}\. [NC] 
RewriteRule ^(.*)$ http://%1.%{HTTP_HOST}/$1 [R=301] 

RewriteCond %{REQUEST_URI} !^admin [NC] 
RewriteCond %{HTTP_HOST} ^([a-z]{2})\.[a-z]{2,}\. [NC] 
RewriteRule ^(.*)$ - [ENV=LANGUAGE:%1,QSA] 

# Redirecting all requests to one script 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([\+a-zA-Z0-9,%\(\)\_\ -/]+)$ /index.php [NC,L,QSA] 

Спасибо за любую помощь, я уверен, что это что-то действительно глупо, что это не так, как обычно.

+0

Пожалуйста, попробуйте переформатируйте свой «код» вокруг кодового блока – superfro

+0

хорошо, как это ... это странно, потому что это выглядело отлично в предварительном просмотре – ianbarker

ответ

2

Ваша проблема в том, что REQUEST_URI не начинается с администратора, у него будет косая черта впереди ... он может начинаться с/admin, если у вас нет базы перезаписи ... так что вы можете изменить ее на! ^/администратор или просто! админы или! админы/если весь ваш код находится в foo.com/admin/*

REQUEST_URI будет всеми GET как «/foo/bar.html»

+0

Я пробовал все это. Я также предположил, что он начнется с /. Однако ни один из них, похоже, не останавливает установленную языковую переменную, это как если бы «RewriteCond» проигнорировал или никогда не совпадал. Нет кода в/admin/вся структура мнимая – ianbarker

+0

Почему бы вам не попробовать что-то более простое ... например RewriteCond% {REQUEST_URI}! Admin [NC] RewriteRule^(. *) $ $ 1? Not_admin = 1 [R, L] Если он перенаправляется, когда у вас есть админ, и нет, когда у вас нет администратора, тогда правило работает нормально ... может быть, вам нужно слепо установить переменную языковой среды к первому по умолчанию, возможно, его сохранение его значения из последнего процесса, поскольку они повторно используются потоки? – superfro

+0

Я думаю, что вы правы в этом, сохраняя его значение из последнего процесса, это правило работает, если я удалю 'RewriteRule^(. *) $ - [ENV = LANGUAGE:% 1, QSA] 'RewriteRule ниже ('RewriteRule^([\ + a-zA-Z0-9,% \ (\) \ _ \ - /] +) $ /index.php [NC, L, QSA]') не запускается. Похоже, мне, возможно, придется обнаружить, что в администраторе с PHP – ianbarker

Смежные вопросы