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 |