Н а этом уроке, мы научиться управлять перезаписью URL с помощью Apache 2 и модуля mod_rewrite . Этот модуль позволяет переписать URL – адреса в более чистой манере, переводя удобочитаемые пути в кодовые дружественных строки запроса или перенаправляют URL – адреса на основе дополнительных условий.
Это руководство разделено на две части. Первая устанавливает пример веб-сайта и показывает простой пример перезаписи. Вторая часть содержит еще два углубленных примера, часто используемых правил перезаписи.
Предпосылки
Следуя этому руководству, вам потребуется:
- Один сервер Debian 8 установленный с первоначальной настройкой сервера.
- Apache 2, установленный на сервере, следуя статьи .
Шаг 1 – Включение mod_rewrite
Во- первых, нам нужно активировать mod_rewrite . Он доступен, но не включен с чистой установкой Apache 2.
Sudo a2enmod rewrite
Он активирует модуль или предупреждает вас о том, что модуль уже включен. Чтобы изменения вступили в силу, перезапустите Apache.
mod_rewrite теперь полностью включен. На следующем шаге мы создадим файл.htaccess , который мы будем использовать, чтобы определить правила перезаписи для редиректа.
Шаг 2 – Настройка.htaccess
Файл.htaccess позволяет изменять наши правила перезаписи без доступа к файлам конфигурации сервера. По этой причине, .htaccess имеет решающее значение для безопасности вашего веб – приложения. Период, который предшествует имени файла гарантирует, что файл скрыт.
Примечание
Любые правила, которые вы будете помещать в файл.htaccess можно также поместить непосредственно в файлы конфигурации сервера. На самом деле, официальная документация Apache рекомендует использовать файлы конфигурации сервера, а не.htaccess потому, что Apache обрабатывает их быстрее.
Тем не менее, в этом простом примере, увеличение производительности будет незначительным. Кроме того, устанавливая правила.htaccess удобно, особенно с нескольких веб – сайтами на одном сервере. Она не требует перезагрузки сервера, чтобы изменения вступили в силу, и это не требует привилегий суперпользователя для редактирования этих правил, что упрощает техническое обслуживание и внесение изменений и возможные с непривилегированных аккаунтов. Некоторые популярные программы с открытым исходным кодом, такие как и Joomla, часто полагается на файл.htaccess в программном обеспечении, чтобы изменять и создавать дополнительные правила по требованию.
Нам нужно будет установить и обеспечить еще несколько настроек, прежде чем мы сможем начать.
По умолчанию Apache запрещает использование файла.htaccess для применения правил перезаписи, поэтому сначала вам нужно разрешить изменения в файл. Открыть файл конфигурации по умолчанию в Apache, используя nano или ваш любимый текстовый редактор.
Sudo nano /etc/apache2/sites-available/000-default.conf
Внутри этого файла вы найдете блок
/etc/apache2/sites-available/000-default.conf
Сохраните и закройте файл. Чтобы изменения вступили в силу, перезапустите Apache.
Sudo systemctl restart apache2
Теперь создайте файл.htaccess в корневой веб директории.
Добавьте эту строку в верхней части нового файла, чтобы активировать перезапись.
/var/www/html/.htaccess
RewriteEngine on
Сохраните файл и выйдите.
Теперь у вас есть оперативный файл.htaccess , который можно использовать для управления правилами маршрутизации вашего веб – приложения. На следующем этапе мы создадим образцы файлов сайта, которые мы будем использовать, чтобы продемонстрировать правила перезаписи.
Шаг 3 – Настройка перезаписи URL
Здесь мы установим базовую перезапись URL, которая преобразует URL – адреса в реальные пути к коду. В частности, мы будем разрешать пользователям доступ. http://your_server_ip /about
Начнем с создания файла с именем about.html в корневой директории веб.
Sudo nano /var/www/html/about.html
Скопируйте следующий HTML-код в файл, а затем сохраните и закройте его.
/var/www/html/about.html
О нас
Вы можете получить доступ к странице http://your_server_ip/about.html, но обратите внимание, что если вы попытаетесь получить доступ к http://your_server_ip/about, вы увидите ошибку 404 Not Found . Но чтобы пользователи получили доступ к странице с помощью about вместо того, чтобы, переписать правила позволит эта самая функциональность.
RewriteRules соблюдает следующий формат:
Общая структура RewriteRule
RewriteRule pattern substitution
- RewriteRule определяет директиву.
- pattern является регулярное выражение, которое соответствует желаемой строки из URL, типы просмотра в браузере.
- substitution это путь к реальному URL, то есть путь файловых серверов Apache.
- flags необязательные параметры, которые можно изменять, как работает правило.
Откройте файл.htaccess .
Sudo nano /var/www/html/.htaccess
После первой строки, добавьте RewriteRule отмеченный красным цветом, и сохраните файл.
/var/www/html/.htaccess
RewriteEngine on RewriteRule ^about$ about.html
В этом случае, ^about$ это шаблон, about.html это замена, и является флагом. Наш пример использует несколько символов со специальным значением:
- ^ указывает на начало URL, после your_server_ip / .
- $ указывает на конец URL.
- about соответствует строке “about”.
- about.html является фактическим файл, который обращается к пользователю.
- является флагом, который делает случай правила нечувствительным.
Теперь, вы должны иметь возможность доступа к http://your_server_ip/about в вашем браузере. На самом деле, с правилом показанным выше, следующие URL – адреса будут указывать about.html:
- http://your_server_ip /about , из-за определения правила.
- http://your_server_ip /About , Так как правило не чувствительно к регистру.
- http://your_server_ip /about.html , так как оригинальное собственное имя файла всегда будет работать.
Ниже не будет:
- http://your_server_ip /about/ , потому что правило четко указано, что не может быть ничего после about помощью $ символа.
- http://your_server_ip /contact , потому что она не будет соответствовать строке about в правиле.
Теперь у вас есть оперативный файл.htaccess с простым правилом, вы можете изменить и расширить для ваших потребностей. В следующих разделах мы покажем два дополнительных примера наиболее часто используемых директив.
Пример 1 – Упрощение строки запросов с RewriteRule
Веб – приложения часто используют строки запроса , которые добавляются к URL – адресу, используя знак вопроса (?) после адреса. Отдельные параметры разделяются с помощью амперсанда (&). Строки запроса могут быть использованы для передачи дополнительных данных между отдельными страницами приложения.
Например, страницы результатов поиска написанные на PHP, могут использовать URL, как http://example.ru/results.php?item=shirt&author=andreyex . В этом примере два дополнительных параметра передают воображаемый result.php сценария приложения: item со значением shirt и author со значением andreyex . Приложение может использовать информацию строки запроса, чтобы построить правильную страницу для посетителя.
Правила перезаписи Apache часто используются для упрощения таких длинных и неприглядных ссылок как выше в дружественные URL – адреса , которые легче вводить и интерпретировать визуально. В этом примере, мы хотели бы, упростить ссылку выше, чтобы сделать http://example.ru/shirt/andreyex . shirt и значения параметров author и andreyex к прежнему адресу, но без строки запроса и имени сценария.
Вот одно правило для реализации этого:
Простой пример
RewriteRule ^shirt/andreyex$ results.php?item=shirt&author=andreyex
shirt/andreyex явно сопоставляются в запрашиваемом адресе и Apache указал запустить вместо этого results.php?item=shirt&author=andreyex .
флаги обычно используются в правила[ перезаписи. Они говорят Apache, чтобы добавить любые дополнительные строки запроса к обслуживаемому URL. Без этого, дополнительная строка запроса будет отбрасываются. http://example.ru/shirt/andreyex?page=2 results.php?item=shirt&author=andreyex&page=2
Хотя этот метод позволяет достичь желаемого эффекта, как имя элемента и author жестко закодированы в правила. Это означает, что правило не будет работать для любыми другими предметами, например pants , или author, как destroyer .
Для того, чтобы сделать правило более общо, мы можем использовать регулярные выражения, чтобы соответствовать части исходного адреса и использовать те части в схеме замещения. Модифицированное правило будет выглядеть следующим образом:
Простой пример
RewriteRule ^(+)/(andreyex|destroyer|fall|spring) results.php?item=$1&author=$2
Первое регулярное выражение группы в скобках соответствует строке, содержащей буквенно-цифровые символы и цифры, как shirt или pants и сохраняет совпавший фрагмент в качестве переменной $1 . Вторая группа выражений в скобках соответствует точно andreyex , destroyer , fall или spring , и так же сохраняет совпавший фрагмент как $2 .
Согласованные фрагменты затем в результирующий URL в переменные item и author вместо жёстко shirt и andreyex , которые мы использовали раньше.
Выше будет преобразовывать, например, http://example.ru/pants/andreyex в http://example.ru/results.php?item=pants&author=andreyex . Этот пример также на будущее, позволяя нескольким элементам и author правильно переписать с использованием единого правила.
Пример 2 – Добавление условия с помощью логики, используя RewriteConds
Правила перезаписи не обязательно всегда вычисляются один за другим без каких – либо ограничений. Директива RewriteCond позволяет нам добавлять условия для наших правил перезаписи, чтобы контролировать, когда правила будут обработаны. RewriteConds соблюдает следующий формат:
Общая структура RewriteCond
RewriteCond TestString Condition
- RewriteCond определяет директиву RewriteCond .
- TestString это тестируемая строка.
- Condition это шаблон или условие, чтобы соответствовать.
- Flags необязательные параметры, которые могут изменить правила условий и оценки.
Если имеет RewriteCond значение истинно, то RewriteRule сразу после будет рассмотрен. Если это не будет, то правило будет отброшено. Многократная RewriteCond может использоваться один за другим, и с поведением по умолчанию, все они должны оценить, верно и в следующем правиле для рассмотрения.
В качестве примера, давайте предположим, что вы хотели бы перенаправить все запросы на несуществующие файлы и каталоги на вашем сайте обратно на главную страницу вместо того чтобы показывать стандартную страницу ошибку 404 Not Found . Это может быть достигнуто с следующими условиями правил:
Перенаправить все запросы на несуществующие файлы и каталоги на главную страницу
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /
С учетом указанных выше:
- %{REQUEST_FILENAME} это строка для проверки. В этом случае, запрашиваемое имя файла, которое является переменной системой, доступной для каждого запроса.
- -f встроенное в условие, которое проверяет, существует ли запрашиваемое имя на диске, и является ли файлом. ! - Является оператором отрицания. В сочетании!-f оценивается как истина, только если указанное имя не существует или не является файлом.
- Аналогичным образом, !-d оценивается как истина, только если указанное имя не существует или не является каталогом.
RewriteRule На последней строке вступит в силу только для запросов на несуществующие файлы и каталоги. RewriteRule Сама по себе очень проста и перенаправляет каждый запрос на / корень сайта.
Вывод
mod_rewrite полезный модуль Apache, который может быть эффективно использован для обеспечения удобочитаемых URL. На этом уроке вы узнали, как использовать директиву RewriteRule для перенаправления URL – адресов, в том числе с строки запроса. Вы также узнали перенаправление URL – адреса с помощью директивы RewriteCond .
Иногда люди сталкиваются с проблемой — сервер apache не читает ваш файл.htaccess или apache не переписывает URL, а мы используем правильные правила перезаписи в конфигурационных файлах. Это происходит из-за того, что модуль rewrite не включен в apache. Т.к модуль mod_rewrite не включен по умолчанию на сервер, поэтому для использования rewrite, нужно вручную включить mode_rewrite. В моей статье «Включить модуль mod_rewrite для Apache в Debian/Ubuntu» я расскажу как я это могу сделать.
1. Включение модуля mod_rewrite в Apache2
Для этого, я использую команду «a2enmod», чтобы включить любые модули в веб-сервере Apache 2. Так что, используйте следующую команду чтобы включить mod_rewrite модуль для apache:
$ sudo a2enmod rewrite
2. Активировать ReWrite в вирутальном хосте
После включения модуля ReWrite для Apache необходимо добавить «AllowOverride All» в вашем файле конфигурации для виртуального хоста. Этот параметр также может быть включен в глобальном масштабе, путем редактирования основного файла конфигурации apache:
3. Перезапуск конфигурации Apache2
После включения модуля mod_rewrite для Apache нужно перезагрузить сервер Apache2:
# service apache2 restart
Тема «Включить модуль mod_rewrite для Apache в Debian/Ubuntu» завершена.
rewritecond rewriterule (13)
У меня новая версия Apache 2.2 на моей машине Vista, все работает нормально, кроме мод-переписывания.
Я раскоментировал
LoadModule rewrite_module modules/mod_rewrite.s
но ни одно из моих правил перезаписи не работает, даже простые
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Все правила, которые я использую, работают на моем хостинге, поэтому они должны быть в порядке, так что мой вопрос в том, есть ли скрытая вещь в конфигурации apache, которая может блокировать переписывание мода?
Если не указано выше, попробуйте отредактировать / etc / apache2 / sites-enabled / 000-default
почти на вершине вы найдете
Измените AllowOverride None на AllowOverride All
это сработало для меня
Очевидно, есть более чем один способ сделать это, но я бы предложил использовать более стандартный:
ErrorDocument 404 /index.php?page=404
Я бы настоятельно советовал всем, кто хочет включить директивы mod_rewrite в файлах.htacces, чтобы использовать AllowOverride FileInfo вместо того, чтобы разрешать все, как предлагают ВСЕ ответы на этой странице. Грустно видеть, что все эти ответы используют подход «как-давно-работает-это-хорошо», а не пытаться понять последствия предлагаемого «решения». Постарайтесь понять, что вы делаете на своем сервере, и как ограничить привилегии, которые вы только что дали с помощью AllowOverride All . RTFM! , это совершенно очевидно по этому вопросу. Давай, парни, это не ракеты, это просто веб-сервер!
Что сработало для меня (в ubuntu):
Sudo su cd /etc/apache2/mods-enabled ln ../mods-available/rewrite.load rewrite.load
Также, как уже упоминалось, убедитесь, что AllowOverride all установлено в соответствующем разделе /etc/apache2/sites-available/default
Для моей ситуации у меня было
RewriteEngine On
в моем.htaccess , вместе с загружаемым модулем, и он не работал.
Решение моей проблемы состояло в том, чтобы отредактировать мою запись vhost для inlcude
AllowOverride all
в разделе
В первый раз, когда я боролся с правилами mod_rewrite, игнорируя свой трафик, я узнал (разочаровывающе), что я поместил их в неправильный
# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2
Эти параметры будут активированы, если вы выполните изящный перезапуск Apache, чтобы вы могли их переработать и внимательно следить за поведением mod_rewrite. Как только ваша проблема будет исправлена, поверните RewriteLogLevel назад и отметьте.
В 100% моего опыта я обнаружил, что RewriteLog помог мне обнаружить проблему с моими правилами перезаписи. Я не могу рекомендовать это достаточно. Удачи в устранении неполадок!
Кроме того, эта закладка - ваш лучший друг: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
Я просто сделал это
Sudo a2enmod rewrite
то вам необходимо перезапустить службу apache, следуя команде
Sudo service apache2 restart
Новая версия Apache в какой-то мере изменилась. Если ваша версия apache равна 2,4, вам нужно перейти в /etc/apache2/ . Будет файл с именем apache2.conf . Вы должны отредактировать его (у вас должно быть разрешение root). Измените текст каталога таким образом
Теперь перезапустите apache.
Service apache2 reload
Надеюсь, что это работает.
Open terminal и typin a2enmod rewrite , он включит ваш модуль mod_rewrite для Apache.
Затем перейдите в /etc/apache2/sites-available и отредактируйте файл по умолчанию. (Для этого у вас должны быть права на доступ к этому файлу и доступной папке.)
Заменить ниже существующими строками от 4 до 14
DocumentRoot /var/www
Теперь перезапустите apache с помощью /etc/init.d/apache2 restart или service apache2 restart
Повторите очистить URL-тест, и на этот раз он будет передан.
Попробуйте установить: AllowOverride All .
Вторая наиболее распространенная проблема заключается не в том, что включена a2enmod rewrite мод: a2enmod rewrite а затем перезапустить apache.
A2enmod rewrite
Service apache2 restart
mod_rewrite теперь будет включен!
Старый поток, просто хочу поставить, что не устанавливайте AllowOverride для всех, а используйте специальный мод, который вы хотите использовать,
AllowOverride mod_rewrite mod_mime
И эта строка должна быть прокомментирована
LoadModule rewrite_module modules/mod_rewrite.so
Чтобы использовать mod_rewrite вы можете ввести следующую команду в терминал:
Sudo a2enmod rewrite
Перезапустить apache2 после
Sudo /etc/init.d/apache2 restart
Sudo service apache2 restart
или в соответствии с новым унифицированным способом управления системой
Sudo systemctl restart apache2
Затем, если хотите, вы можете использовать следующий.htaccess файл.
Вышеупомянутый файл.htaccess (если он помещен в ваш DocumentRoot) перенаправит весь трафик в файл index.php в DocumentRoot если файл не существует.
Итак, предположим, что у вас есть следующая структура каталогов, а httpdocs - DocumentRoot
Httpdocs/ .htaccess index.php images/ hello.png js/ jquery.js css/ style.css includes/ app/ app.php
Любой файл, который существует в httpdocs, будет передан реквестеру с использованием.htaccess показанного выше, однако все остальные будут перенаправлены на httpdocs/index.php . Ваши файлы приложений в includes/app не будут доступны.
Вспомните последнее посещение интернет-магазина. Найдя нужный товар, вы, вероятно, увидели примерно такой URL:
Это происходит не потому, что разработчики этого сайта потратили уйму времени, чтобы настроить отдельные директории для разных категорий товара, а благодаря удобному модулю по имени mod_rewrite. Данный модуль позволяет создавать пользовательские и упрощенные URL-адреса. На самом деле URL выглядит примерно так:
http://www.buy-online.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?
Данное руководство охватывает активацию данного модуля, создание и использование страницы.htaccess, а также настройку переписывания URL-адресов.
Требования
Кроме того, нужно предварительно установить apache. Для быстрой установки этого веб-сервера в Ubuntu используйте команду:
sudo apt-get install apache2
1: Включение mod_rewrite
Для начала нужно включить mod_rewrite, это очень просто:
sudo a2enmod rewrite
Данная команда включит модуль или же выведет сообщение «Module rewrite already enabled» в случае если модуль уже включен.
2: Что такое.htaccess?
Как только модуль был активирован, можно настроить перезапись ссылок путем создания файла.htaccess в каталоге сайта.
Файл.htaccess – это способ тонкой настройки сайта без необходимости изменять файлы конфигурации сервера. Точка, с которой начинается имя файла, значит, что этот файл является скрытым.
Кроме того, важную роль играет размещение файла.htaccess, поскольку настройки этого файла будут влиять на все файлы и подкаталоги каталога, в котором он находится.
Создать файл.htaccess можно при помощи текстового редактора, а затем выгрузить его на сайт при помощи ftp-клиента.
Обратите внимание : файл должен называться именно.htaccess; имя файла не должно содержать дополнительных расширений.
В качестве альтернативы можно создать файл.htaccess через терминал при помощи этой команды, заменив example.com доменным именем сайта.
Включение файла.htaccess
Чтобы разрешить файлу.htaccess переопределять стандартные настройки сайта, откройте конфигурационный файл.
Примечание : для этого понадобятся расширенные привилегии sudo.
sudo nano /etc/apache2/sites-available/default
В этом файле найдите следующий раздел и измените значение строки AllowOverride (замените None на All). В результате раздел будет иметь такой вид:
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Сохранив изменения и закрыв файл, перезапустите сервер apache. Теперь файлы.htacess доступны всем сайтам сервера.
sudo service apache2 restart
Теперь все готово для переписывания URL-адресов сайта.
3: Переписывание URL-адресов
Вся операция переписывания URL происходит в файле.htaccess. В целом, все команды перезаписи URL-адреса следовать той же схеме:
RewriteRule Pattern Substitution
Опции, использованные в данной команде:
- RewriteRule: Это раздел, в котором можно задать нужные директивы.
- Pattern: этот раздел предназначен для интерпретации нужного URL-адреса с помощью регулярных выражений. Это руководство не охватывает регулярные выражения; некоторую полезную информацию по этому вопросу можно найти на сайте Apache .
- Substitution: отображает фактический URL страницы. Такую ссылку трудно запомнить, поскольку она состоит из параметров PHP или длинных последовательностей цифр, например: www.bestshop.com/gadgets.php?innovation=laptops
- Optional Flags: флаг представляет собой тег в конце директивы RewriteRule, способный изменить поведение выражения. Некоторые общие флаги: [F] запрещает URL, игнорирует заглавные буквы, или контролируют используемый код переадресации, [L] говорит о том, что это последнее правило в серии.
Примеры перезаписи URL-адреса
Пример 1: открываете страницу А – попадаете на страницу Б
Это наиболее простой пример перезаписи URL: посетитель сайта вводит в браузер один URL, но перенаправляется на другой. Чтобы настроить такое поведение, следуйте инструкциям этого раздела.
Для начала создайте две страницы сайта; например, первая о яблоках (apples.html), а вторая – об апельсинах (oranges.html).
Скопируйте этот код:
This page is about Apples
Затем создайте вторую страницу (в данном случае, страницу, посвященную апельсинам). Для этого просто замените Apples в этом блоке кода на Oranges.
Затем откройте файл.htaccess:
sudo nano /var/www/example.com/.htaccess
Внесите в него следующие команды перезаписи URL:
RewriteEngine on
RewriteRule ^oranges.html$ apples.html
Сохраните и закройте файл.
Затем посетите страницу /oranges.html, она будет содержать информацию страницы /apples.html.
Рассмотрим вышеприведенную команду подробнее:
- ^oranges.html: указывает, как начинается нужная страница. Каре (^) указывает на начало строки. Другими словами, если бы страница, URL которой нужно переписать, начиналась иначе (например, не oranges.html, а oranges_1.html), она не совпала бы с правилом перезаписи (rewrite rule) и не была бы перенаправлена на страницу birds.html.
- $: символ доллара ставится в конце URL-адреса. Опять же, если строка заканчивается иначе (например, содержит какие-либо символы после заявленных последних символов), веб-страница не будет распознана правилом перезаписи.
- apples.html: на эту страницу браузер направляет трафик.
Пример 2: Параметр как подкаталог в URL-адресе
Проверьте url:
http://example.com/results.php?products=apple
Он будет гораздо понятнее отображаться как:
http://example.com/products/apple
Для этого нужно внести в.htaccess следующие строки:
RewriteEngine on
RewriteRule ^products/(+)/?$ results.php?products=$1
Эти строки состоят из следующих опций:
- ^products: в данном случае чтобы быть перенаправленным, URL должен начинаться со слова products (имейте в виду, что это относится только к тексту после домена). Опять же, если URL начинается иначе, правило не будет применяться.
- (+): этот взятый в скобки текст указывает, что URL может состоять из любых символов. Знак плюс указывает, что находиться в скобках может один или несколько символов.
- /?$: символ доллара обозначает конец строки. Вопросительный знак позволяет ставить в конце строки косую черту (хотя это необязательно).
- : это флаг в конце фразы, указывающий, что правило должно игнорировать регистры всех символов.
Пример 3: Настройка чистых ссылок
Эта функция незаменима в том случае, если URL-адреса сайта слишком длинные или сложные.
В качестве примера можно взять такой URL-адрес:
http://example.com/results.php?products=produce&type=fruit&species=apple
http://example.com/produce/fruit/apple
Для этого нужно внести в.htaccess следующие строки (к слову, .htaccess может содержать неограниченное количество таких разделов):
RewriteEngine on
RewriteRule ^(meat|produce|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3
Рассмотрим этот код подробнее:
- Каре (символ ^) указывает на начало выражения.
- (meat|produce|dairy): чтобы ограничить параметры, которые можно отображать, укажите в скобках только разрешенные значения (в этом случае это meat, produce и dairy). Если URL содержит параметр, не внесенный в скобки, перезапись не будет выполнена.
- ([^/.]+) показывает, что все, кроме символов после символа вставки (в данном случае, косой черты и точки), может быть написано через косую.
- results.php?products=$1&type=$2&species=$3: каждое значение в круглых скобках будет извлечено и затем вставлено в более длинный URL в части substitution. $1 обозначает первые скобки, $2 – вторые, $3 – соответственно, третьи.
Продолжение статьи можно найти .
Tags: ,