Интернационализация на поддоменах — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: « category:.htaccess Предположим у нас есть сайт с несколькими языковыми версиями. Адрес этого са…»)
 
 
(не показано 6 промежуточных версий 1 участника)
Строка 1: Строка 1:
  [[category:.htaccess]]
+
  [[category:.htaccess]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]
 +
'''Актуально для версии 2.9'''
  
 
Предположим у нас есть сайт с несколькими языковыми версиями. Адрес этого сайта, например domain.com, и работает он на мультидоменной UMI.CMS.<br />
 
Предположим у нас есть сайт с несколькими языковыми версиями. Адрес этого сайта, например domain.com, и работает он на мультидоменной UMI.CMS.<br />
 
При выборе английской языковой версии, мы будем видеть адреса domain.com/en/page, а хотелось бы en.domain.com/page.<br />
 
При выборе английской языковой версии, мы будем видеть адреса domain.com/en/page, а хотелось бы en.domain.com/page.<br />
В этом случае, если разрабатывается не сильно нагруженный проект, можно внести некоторые изменения в .htaccess для реализации<br />
+
В этом случае можно внести некоторые изменения в .htaccess для реализации<br />
 +
  Если разрабатываемый проект будет высоко нагруженным, использование статьи не рекомендуется.
 
<br />
 
<br />
 
Во первых, находим строку где подключается механизм mod_rewrite, такой строкой
 
Во первых, находим строку где подключается механизм mod_rewrite, такой строкой
Строка 27: Строка 29:
 
И заменяем его вот на такую конструкцию, которая нам будет делать правильные запросы и перенаправлять нас с адресов en.domain.com/en/ на корректные
 
И заменяем его вот на такую конструкцию, которая нам будет делать правильные запросы и перенаправлять нас с адресов en.domain.com/en/ на корректные
 
<source lang="apache">
 
<source lang="apache">
 +
#Fix url
 
RewriteCond %{HTTP_HOST} ^en.
 
RewriteCond %{HTTP_HOST} ^en.
 
RewriteCond %{REQUEST_URI} ^/en
 
RewriteCond %{REQUEST_URI} ^/en
 
RewriteRule ^en(.*)$ $1 [R=301,L]
 
RewriteRule ^en(.*)$ $1 [R=301,L]
 +
#Fix url
  
 
RewriteCond %{HTTP_HOST} ^en.
 
RewriteCond %{HTTP_HOST} ^en.
Строка 40: Строка 44:
 
RewriteRule ^(.*)$ index.php?path=$1&%{QUERY_STRING}  [L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 
RewriteRule ^(.*)$ index.php?path=$1&%{QUERY_STRING}  [L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 
</source>
 
</source>
 +
 +
Для корректной работы, у вас должны быть поддомены смотрящие в ту же папку что и основной домен.<br />
 +
Блок #Fix url можно и опустить, но в этом случае, на сайте при переходе по ссылкам созданным макросом content menu() ссылки будут выглядеть как
 +
  en.domain.com/en/page
 +
Исправить это можно используя javascript перебрав все элементы a href="/en/page" и заменив их на a href="page" после загрузки каждой страницы. Таким образом на сервер нагрузки будет меньше, но она увеличится на клиенте.

Текущая версия на 11:26, 5 июня 2013

Актуально для версии 2.9

Предположим у нас есть сайт с несколькими языковыми версиями. Адрес этого сайта, например domain.com, и работает он на мультидоменной UMI.CMS.
При выборе английской языковой версии, мы будем видеть адреса domain.com/en/page, а хотелось бы en.domain.com/page.
В этом случае можно внести некоторые изменения в .htaccess для реализации

 Если разрабатываемый проект будет высоко нагруженным, использование статьи не рекомендуется.


Во первых, находим строку где подключается механизм mod_rewrite, такой строкой

RewriteEngine On

Сразу после это строки нам надо добавить одно условие, вот такой записью

RewriteCond %{REQUEST_URI} !^/en/admin
RewriteCond %{REQUEST_URI} ^/en
RewriteCond %{HTTP_HOST} !^en.
RewriteRule ^en(.*)$ http://en.%{HTTP_HOST}$1 [R=301,L]

Эта запись будет нас перенаправлять на en.domain.com с domain.com/en/
Теперь ищем в .htaccess самое главное правило в системе

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?path=$1&%{QUERY_STRING}  [L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

И заменяем его вот на такую конструкцию, которая нам будет делать правильные запросы и перенаправлять нас с адресов en.domain.com/en/ на корректные

#Fix url
RewriteCond %{HTTP_HOST} ^en.
RewriteCond %{REQUEST_URI} ^/en
RewriteRule ^en(.*)$ $1 [R=301,L]
#Fix url

RewriteCond %{HTTP_HOST} ^en.
RewriteCond %{REQUEST_URI} !^admin
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?path=en/$1&%{QUERY_STRING}  [L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{HTTP_HOST} !^en.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?path=$1&%{QUERY_STRING}  [L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Для корректной работы, у вас должны быть поддомены смотрящие в ту же папку что и основной домен.
Блок #Fix url можно и опустить, но в этом случае, на сайте при переходе по ссылкам созданным макросом content menu() ссылки будут выглядеть как

 en.domain.com/en/page

Исправить это можно используя javascript перебрав все элементы a href="/en/page" и заменив их на a href="page" после загрузки каждой страницы. Таким образом на сервер нагрузки будет меньше, но она увеличится на клиенте.