Интернационализация на поддоменах — различия между версиями
XiBOR (обсуждение | вклад) (Новая страница: « category:.htaccess Предположим у нас есть сайт с несколькими языковыми версиями. Адрес этого са…») |
Mad grant (обсуждение | вклад) |
||
(не показано 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 /> |
+ | Если разрабатываемый проект будет высоко нагруженным, использование статьи не рекомендуется. | ||
<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" после загрузки каждой страницы. Таким образом на сервер нагрузки будет меньше, но она увеличится на клиенте.