Використання дружніх 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

    и

    і

    За замовчуванням .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 призводить до збільшення часу обробки сторінок сайту.