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 |
Прежде всего, директива 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] |
Если ваш сайт работает в среде, в которой имеют место проблемы, связанные с агрессивной сборкой мусора, о чем могут свидетельствовать неожиданные и частые выходы из админки, то можно настроить местонахождение для файлов сеансов, чтобы убрать их из глобальной и разделяемой папки tmp/session, где они находятся по умолчанию:
1 2 | php_value session.save_path /path/to/your/web/content/sessions/ php_value session.gc_maxlifetime 28800 |
По умолчанию файл .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 (и отключить ее невозможно), бегите отсюда на новый хостинг как можно быстрее. Да-да, серьезно.
Начиная с 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 |
Если на вашем сайте используются файлы .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 |