Про декілька корисних речей, які можна зробити з допомогою htaccess. Ці речі, ви зможете використовувати на своїх веб-сайтах. Вони зроблять роботу з сайтами зручнішою.
1. Перенаправлення відвідувачів при оновленні сайту.
Коли Ви оновлюєте або тестуєте сайт на хостингу, Ви можете перенаправляти відвідувачів на певну сторінку. Для цього у файлі .htaccess необхідно прописати наступний код:
order deny,allow
deny from all
allow from 123.122.133.144
ErrorDocument 403 /page.html
allow from all
Замініть 123.122.133.144 на Вашу ip-адресу, а також замініть page.html на ту сторінку, яку бачитимуть користувачі, що зайшли на сайт.
2. Певна сторінка з помилкою 404.
Коли користувачі звертаються до сторінки на Вашому сайті, якої не існує, то їм показується помилка 404. Якщо ви хочете зробити її певною сторінкою, то у файлі .htaccess слід прописати наступний код:
ErrorDocument 404 /404.html
Перенаправляти відвідувачів у такому разі зручно на головну сторінку сайту.
3. Редирект на переміщені або перейменовані сторінки.
Якщо ви перейменували або перемістили деякі сторінки на сайті і хочете, щоб відвідувачі побачили вже нові сторінки, навіть якщо вони звертаються за старою адресою, слід у файл .htaccess прописати наступний код: Redirect 301 /old.html http://yoursite.com/new.html
Також ви можете використовувати такий редирект для того, щоб сторінка не загубилася для пошукових роботів.
4. Заборона на проглядання директорії.
Якщо у Вас в папці на сайті немає файлу index.html, index.htm або index.php, то будь-який користувач може подивитися, які файли в ній лежать. Зробіть запис:
Options -Indexes
5. Створення красивих URL.
Поза сумнівом, що з цих двох посилань перше виглядає набагато привабливішим: http://yoursite.com/about http://yoursite.com/pages/about.html
За допомогою файлу .htaccess і апач модуля який називається mod_rewrite, ви зможете переробити свої посилання на красивіші і коротші. Ось деякі приклади з кодом:
RewriteEngine on
RewriteRule ^about/$ /pages/about.html [L]
RewriteRule ^features/$ /features.php [L]
RewriteRule ^buy/$ /buy.html [L]
RewriteRule ^contact/$ /pages/contact.htm [L]
P.S. У інтернеті існує декілька сайтів, за допомогою яких можна автоматично редагувати файл .htaccess. Наприклад htaccesseditor.com.
P.P.S. Щоб з нуля створити такий файл Вам слід відкрити, наприклад, блокнот, вписати в нього рядок
AddHandler application/x-httpd-php .php .htm .html
натиснути "Зберегти як...", в ім'я файлу ввести .htaccess і вибрати "всі файли".
Перевизначення повідомлень про помилки
Однією з корисних можливостей Apache є підміна стандартних повідомлень про помилки веб-сервера-сервера своїми. Для цього служить директива ErrorDocument.
ErrorDocument 403 "Forbidden
ErrorDocument 404 /errors/404.html
Увага: при вказівці безпосередньо HTML коду в даній директиві лапки ставляться тільки на початку рядка (див. приклад)
Шляхи до файлів указуються щодо кореневого каталога даного веб-сервера-хоста, а не щодо файлової системи (правильно: /errors/404.html; неправильно: /var/www/myhost/html/errors/404.html).
Парольний захист
Якщо Вам потрібно захистити частину вмісту Вашого сайту сторонніх, можна скористатися директивами сімейства Auth. Вони примушують сервер питати у клієнта ім'я користувача і пароль для доступу до вмісту каталога, в якому розміщений .htaccess, а також до його підкаталогів. Для цього необхідно створити файл з паролями (зазвичай називається .htpasswd) і розмістити його в безпечному місці (например, на рівень вище за каталог, який є кореневим для Вашого хоста; наприклад, якщо сайт розміщений в /home/user/html, то .htpasswd краще покласти в /home/user). Для створення .htpasswd використовуйте утиліту htpasswd з комплекту Apache. Для установки захисту на якийсь каталог необхідно розмістити в ньому файл .htaccess наступного вигляду:
AuthUserFile /home/user/.htpasswd
AuthName “Secure Zone”
AuthType Basic
Require valid-user
AuthUserFile указує шлях до файлу з паролями. AuthName визначає так званий 'realm'; зазвичай указується, до чого здійснюється доступ (наприклад, 'Site Management Tools', 'Billing Information' і т.п.)
AuthType визначає тип авторизації; практично завжди використовується Basic (окрім нього доступний тип Digest). Require визначає набір умов, по яких визначається, хто з перерахованих в .htpasswd користувачів має доступ до даного каталога сайту. 'valid-user' має на увазі, що доступ може отримати будь-який користувач після введення пароля; замість valid-user можна через пропуск перерахувати імена користувачів, яким надається доступ.
Включення підтримки SSI
Якщо ssi за умовчанням не включений (або ви хочете додати інший тип файлів, для того, щоб там оброблялися директиви ssi) і настройки вебсервера дозволяють використовувати наступні директиви, то пропишіть в .htaccess
AddType text/html .shtml .htm .html
AddHandler server-parsed .shtml
Options +Includes
Блокування по IP адресах
Засобами файлу .htaccess можна обмежити доступ до ресурсів сайту по IP адресам; наприклад, вирішити доступ до медіа-архіву тільки користувачам з локальної мережі, або заборонити якому-небудь хосту або мережі доступ до якого-небудь контенту. Синтаксис для цих директив такий:
Order Deny,Allow (або Allow,Deny – залежно від того, що потрібно)
Deny from all (або адреса хоста)
Allow from all (або адреса хоста)
Наприклад,
Order Deny,Allow
Deny from all
Allow from 192.168.0.
Allow from .localnet
Allow from admin.somewhere.in.the.net
викликає відмову в доступі для всіх, окрім мережі 192.168.0.0/24, всіх хостів, DNS ім'я яких містить .localnet, а також хоста, DNS ім'я якого admin.somewhere.in.the.net.
Якщо потрібно заборонити доступ групі хостів, використовується Allow,Deny:
Order Allow,Deny
Allow from all
Deny from 192.168.1.
Deny from hackers.are.everywhere.in.the.net
Принцип простий. По Order визначається порядок обробки правил allow/deny; якщо ми візьмемо другий приклад, то спочатку сервер обробить правило allow from all, а потім хости, які пройшли це правило, піддаються перевірці правилом deny; при цьому всі хости з мережі 192.168.1.0/24 і хост hackers.are.everywhere.in.the.net не проходять цю перевірку і не дістають доступу.
Order Deny,Allow
Deny from all
– дане правило заборонить будь-яким хостам доступ до файлів з розширеннями .txt и .dat (наприклад, в них можуть зберігатися внутрішні дані скриптів).
Блокування по реферреру
За допомогою використання модуля mod_rewrite и файла .htaccess можна добитися заборони доступу до Ваших ресурсів, якщо клієнт прийшов з якогось певного сайту (блокування по referer'у). Для цього потрібні наступні директиви .htaccess:
RewriteEngine on
# Options +FollowSymlinks # – розкоментувати, якщо з'являється помилка 500 Internal Server Error
RewriteCond %{HTTP_REFERER} badsite.com [NC]
RewriteRule .* – [F]
Або, якщо потрібно перерахувати більше одного сайту
RewriteEngine on
# Options +FollowSymlinks # – розкоментувати, якщо з'являється помилка 500, Internal Server Error
RewriteCond %{HTTP_REFERER} badsite.com [NC,OR]
RewriteCond %{HTTP_REFERER} anotherbadsite.com
RewriteRule .* – [F]
Якщо потрібно заборонити доступ безпосередньо зі всіх хостів, окрім визначених, набір правил виглядатиме приблизно так:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www.)?mydomain.ua(/)?
RewriteCond %{HTTP_REFERER} !^http://(.*).mydomain.ua(/)?
RewriteRule .*.(gif|jpg|jpeg|png)$ – [F]
Зміна індекс-сторінки
Задати/Змінити індексний файл і послідовність їх обробки можна директивою DirectoryIndex Наприклад:
DirectoryIndex photo.php photo.php5 index.php
Перенаправлення
Для організації редіректа засобами .htaccess достатньо рядка вигляду:
Redirect /old_directory/old_file.html http://your_new_site.com/new_directory/new_file.html
якщо потрібне редиректити весь вміст підкаталогу:
Redirect /old_directory http://your_new_site.com/new_directory/
редирект для всього сайту:
RewriteEngine On
RewriteRule (.*) http://your_new_site.ua
Заборона звернень до .htaccess за умовчанням вже є в httpd(2).conf, тобто в самій конфігурації веб-сервера.
Order allow,deny
Deny from all
Додавання MIME-типів
Для додавання MIME-типів використовується директива
AddType mime/type extension
Наприклад
AddType application/x-bittorrent torrent
Використовується вона в тих випадках, коли конфігурація за умовчанням примушує сервер передавати документи не так, як потрібнo; наприклад, багато серверів за умовчанням мають на увазі тип text/plain, і бінарний файл (наприклад, rar-архів), викачаний з такого сервера, цілком може виявитися «битим».
Заборона прямих посилань на ресурси
Якщо Ви хочете уникнути так званого «хотлінкинга» - прямих посилань на Ваші ресурси з інших сайтів - Вам знову-таки допоможе .htaccess у комбінації з mod_rewrite. Спершу розглянемо, чим поганий хотлінкинг. Наприклад, якийсь сайт розміщує у себе зображення, що знаходиться на Вашому сайті, просто вказавши його в тегу <імg srс=" ">. При цьому всі звернення до такої сторінки викличуть скачування даного зображення з Вашого сайту; таким чином, витрачатиметься Ваш трафік і пропускна спроможність каналу сервера, а відвідувачі чужого веб-сайту побачать зображення, що зберігається у Вас. Як же боротися з подібною практикою? Розглянемо наступний приклад частини файлу .htaccess:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(js|css)$ - [F]
Даний код забороняє звернення до .js и .css файлів(скрипти javascript і описи Cascading Style Sheets), якщо вони проводяться не з Вашого сайту. Інший приклад:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(png|gif|jpg|jpeg)$ http://www.mydomain.com/figtobi.gif [R,L]
При зверненні ззовні до зображень, що зберігаються на вашому сайті, замість самих зображень відображатиметься вміст файлу figtobi.gif.
Заборона виведення списку файлів
Apache (при включенні відповідних опцій) уміє відображати список файлів в каталозі, якщо в нім немає жодного з перерахованих в DirectoryIndex файлів. Часто ця опція включена за умовчанням, що може бути неприйнятне. Рядок
Options -Indexes
відключити цей режим.
Проте іноді може, навпаки, знадобитися дозволити проглядати список файлів, при цьому виключивши з нього їх частину. Для цього служить IndexIgnore. Наприклад
IndexIgnore *.php* *.pl *.html *.shtml
дозволяє виведення списку всіх файлів, окрім PHP і Perl скриптів, а також HTML документів.
Перенаправлення домена з www на без www.
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.mysait\.ua$ [NC]
RewriteRule ^(.*)$ http://my-sait.ua/$1 [R=301,L]
Примусове використання HTTPS
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
# Примітка: Рекомендується включити HTTP Strict Transport Security (HSTS)
# на вашому HTTPS сайті для запобігання атакам посередника (man-in-the-middle).
# https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security
# Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Редирект всього сайту
Redirect 301 / http://newsite.com/
У файлі .htaccess можна також прописати настройки для PHP. Їх дуже багато.
# Наприклад:
php_value upload_max_filesize 50M
php_value max_execution_time 240
Якщо WEBP зображення підтримуються і зображення з розширеннями .webp і тими ж іменами знайдені в тому ж місці, де і зображення jpg/png, які потрібно відправити, то тоді замість них відправляються зображення WEBP.
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule (.+)\.(jpg|png)$ $1.webp [T=image/webp,E=accept:1]
Опції PHP
1. Змусити працювати PHP скрипти в HTML файлах
RemoveHandler .php .htm .html
AddHandler application/x-httpd-php .php .htm .html
2. Змусити виконувати PHP у файлах JavaScript
AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js
SetHandler application/x-httpd-php
3. Обмеження розміру завантажуваного файлу для PHP
php_value upload_max_filesize 20M
20M — це розмір файлу в мегабайтах
4. Змінити максимальний розмір запиту для завантаження в PHP
php_value post_max_size 10M
5. Змінити час виконання скрипта
php_value max_execution_time 30
30 — час виконання скрипта в секундах.
6. Зміна часу на розбір введених даних
php_value max_input_time 60
Обговорення. Всього коментарів: 0