Использование дружественных URL

Настройка файла .htaccess для Evo для задействования возможностей модуля Apache mod_rewrite

Evo поддерживает дружественные URL благодаря файлу .htaccess с определенными настройками. Чтобы использовать этот функционал, ваш сайт должен работать на сервере Apache с включенным модулем mod_rewrite, также, естественно, имя файла надо изменить с ht.access на .htaccess. Ниже приведен рекомендуемый шаблон для дополнительных настроек:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# Fix Apache internal dummy connections from breaking [(site_url)] cache
RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC]
RewriteRule .* - [F,L]
# Rewrite domain.com -> www.domain.com -- used with SEO Strict URLs plugin
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
#RewriteRule (.*) http://www.example.com/$1 [R=301,L]
# Exclude /assets and /manager directories from rewrite rules
RewriteRule ^(manager|assets) - [L]
# For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
# Reduce server overhead by enabling output compression if supported.
#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5
Если вы используете сервер IIS, дружественные URL вам все равно будут доступны, однако оптимальные решения требуют использования платных дополнительных модулей для IIS.

Общие настройки для файла .htaccess

Прежде всего, директива RewriteBase должна указывать на папку, в которую установлена Evo. Например, если вы установили Evo в подпапку "evo", для этой директивы нужно указать значение "/evo":

1
RewriteBase /evo

Обратите внимание, что в последнем блоке директив директивы сжатия gzip закомментированы, так как в некоторых средах они потенциально могут вызывать проблемы. Тем не менее, для того, чтобы веб-сервер работал быстрее, последние две строчки следует раскомментировать, как показано ниже:

1
2
3
# Reduce server overhead by enabling output compression if supported.
php_flag zlib.output_compression On
php_value zlib.output_compression_level 5

Вам также может понадобиться сделать ваши URL нечувствительными к регистру, для этого следует добавить к директиве, находящейся в секции "For Friendly URLs" (это директивы для управления дружественными URL), директиву NC:

1
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]

Если вы предпочитаете, чтобы на вашем сайте к введенным URL-адресам всегда добавлялся префикс "www.", то есть чтобы ваши URL всегда показывались в виде "www.example.com", тогда нижеследующий раздел должен быть изменен таким образом:

1
2
3
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

Если вы не используете виртуальные домены и работаете на локальном компьютере, или вы ждете обновление DNS, то есть если для доступа к вашему сайту вы используете URL вида "http://10.0.0.1/~myacct", правило перезаписи URL следует переписать, как показано ниже. При этом, когда вы перейдете на удаленный сервер, не забудьте восстановить все, как было.

1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /~myacct/index.php?q=$1 [L,QSA]

Защита админки

Если вы хотите ограничить доступ к админке только конкретным IP-адресом, но при этом вам нужно разрешить доступ к компонентам, относящимся к открытой части сайта, например, к капче, используйте следующие директивы. Эти директивы должны быть помещены в файл .htaccess, находящийся в папке админки:

1
2
3
4
5
6
7
# Разрешаем доступ к админке только с конкретных IP-адресов
Options +FollowSymlinks
RewriteEngine On
# Блокировка по IP. Для IP-адресов, указанных в списке, доступ будет открыт.
RewriteCond %{REMOTE_ADDR} !^(192\.168\.0\.128)$
RewriteCond %{REQUEST_FILENAME} !/includes/veriword\.php$
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Первую строчку ("Options +FollowSymlinks") может понадобиться закомментировать в некоторых ситуациях, где подобная строчка уже присутствует в корневой папке сайта, чтобы избежать ошибок сервера.

Управление сеансами

Если ваш сайт работает в среде, в которой имеют место проблемы, связанные с агрессивной сборкой мусора, о чем могут свидетельствовать неожиданные и частые выходы из админки, то можно настроить местонахождение для файлов сеансов, чтобы убрать их из глобальной и разделяемой папки tmp/session, где они находятся по умолчанию:

Если вы добавили эти директивы в ваш файл .htaccess, их также надо добавить в файл .htaccess, находящийся в папке админки.
1
2
php_value session.save_path /path/to/your/web/content/sessions/
php_value session.gc_maxlifetime 28800

Файлы CSS и JS как документы Evo

По умолчанию файл .htaccess для Evo настроен так, что он исключает из области действия правил перезаписи URL папку /assets и папку админки. Если у вас есть документ Evo, используемый как файл CSS, вам надо будет изменить одну строчку, чтобы разрешить перезапись URL в папке /assets, если ваш файл CSS находится именно там.

1
RewriteRule ^(manager|assets) - [L]

Это следует изменить так

1
RewriteRule ^manager - [L]
Подсказка

Если вам все-таки нужно сохранить некоторые подпапки как исключения, то правила перезаписи можно отключить, например, в папках /assets/images и /assets/snippets с помощью следующей директивы:

1
RewriteRule ^(manager|assets/images|assets/snippets) - [L]

Часовой пояс

На некоторых серверах могут быть не настроены часовые пояса, что может вызывать проблемы. Можно попробовать настроить часовой пояс следующим образом (полный список поддерживаемых часовых поясов находится здесь).

1
php_value date.timezone Europe/Moscow

или

1
SetEnv TZ America/Chicago

Кодировки символов по умолчанию

В принципе, чтобы корректно обрабатывать символьные кодировки, вам нужно соответствующим образом исправить ваш код и базу данных. Однако если вам очень хочется, то вы можете прочитать справку о директиве AddDefaultCharset и подумать об использовании этой директивы в следующем виде:

1
AddDefaultCharset utf-8

Директива register_globals

Предупреждение

Если у вашего сервера включена директива register_globals (и отключить ее невозможно), бегите отсюда на новый хостинг как можно быстрее. Да-да, серьезно.

Начиная с Evo версии 1.2.1, директива register_globals на вашем сервере должна быть отключена, иначе Evo не будет работать.

Если директива register_globals включена, то ваш сайт практически со стопроцентной вероятностью рано или поздно будет взломан, а если он находится на разделяемом хостинге, так тем более. Это все равно, что дать маленькому ребенку поиграться с заряженным пистолетом и надеяться, что он не нажмет на курок. Если вы платите за хостинг меньше 15 долларов в месяц, значит, ваш хостинг разделяемый. Подробнее о директиве register_globals см. здесь.

Чтобы проверить, что эта директива отключена, откройте админку, затем войдите в меню "Система" и выберите пункт "Системная информация", затем в открывшейся странице выберите ссылку phpinfo(). На странице, открывшейся по этой ссылке, найдите информацию о директиве register_globals. Ее локальное значение должно быть OFF. Если же ее основное значение равно OFF, то беспокоиться по поводу этой директивы вам не нужно.

Если директива register_globals вызывает ошибку сервера 500:

Это означает, что ваш сервер запрещает устанавливать директивы PHP в файле .htaccess. В этом случае соответствующее изменение надо внести напрямую в файл php.ini. Если вы используете платный хостинг, свяжитесь с его техподдержкой, чтобы они это сделали. Надо сказать, что не все серверы позволяют использовать локальные файлы php.ini, к тому же, они должны содержать все настройки PHP (а не только эту), иначе все неуказанные директивы PHP будут установлены в значения по умолчанию. Подробнее об установке директив PHP см. на сайте www.php.net.

1
2
# Отключаем register_globals, так как у нас корявый хостинг, не заботящийся о безопасности
php_flag register_globals Off

Разбираемся с причудами Internet Explorer

Если на вашем сайте используются файлы .htc, то некоторые серверы могут их отдавать с неправильным MIME-типом. Чтобы решить эту проблему, можно добавить следующую строчку. Это критически важно для пользователей MS Windows XP SP2:

1
2
# Настраиваем MIME-тип для файлов .htcдля Internet Explorer
AddType text/x-component .htc

Следующие директивы позволяют ликвидировать мерцание экрана при использовании IE в случае наложения разных файлов CSS. После того, как вы их введете, вам может понадобиться принудительная перезагрузка страницы, чтобы увидеть изменения.

1
2
3
4
5
6
7
8
9
# Исправляем мерцание экранадля Internet Explorer
ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
BrowserMatch "MSIE" brokenvary=1
BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
BrowserMatch "Opera" !brokenvary
SetEnvIf brokenvary 1 force-no-vary
Файлы .htaccess дают возможность настраивать конфигурацию сервера на уровне отдельной папки, если у вас нет доступа к главному конфигурационному файлу сервера Apache httpd.conf. Вообще-то, при любой возможности для директив сервера следует использовать главный конфигурационный файл, так как использование файлов .htaccess приводит к увеличению времени обработки страниц сайта.
Mem: 3.75 mb, MySQL: 0.0026 s, 2 req., PHP: 0.0373 s, all: 0.0399 s, cache.