25 правил .htaccess, які повинен знати кожен web-розробник

По темі:


Файл-конфигуратор Apache-серверов .htaccess


Перш ніж ми почнемо, звертаю вашу увагу на той факт, що зловживання використанням .htaccess може привести до зниження продуктивності вашого сайту. Головне правило: використовувати .htaccess для реалізації того чи іншого завдання стоїть тільки в тому випадку, якщо немає інших варіантів.

Переконайтеся в тому, що ви зробили резервну копію оригінального файлу .htaccess для вашого сайту, перш ніж вносити будь-які зміни. Крім того, пам'ятайте - працездатність вказаних нижче правил залежить від індивідуальних налаштувань вашого web-сервера, заданих хостером. Деякі директиви можуть бути заборонені і не працювати.

.htaccess (від. англ. hypertext access) - файл додаткової конфігурації веб-сервера Apache, а також подібних йому серверів. Дозволяє задавати велику кількість додаткових параметрів і дозволів для роботи веб-сервера в окремих каталогах (папках), таких як керований доступ до каталогів, перепризначення типів файлів і т.д., без зміни головного конфігураційного файлу.

Файл .htaccess може бути розміщений в будь-якому каталозі. Директиви цього файлу діють на всі файли в поточному каталозі і у всіх його підкаталогах (якщо ці директиви не перевизначені директивами нижележащих файлів .htaccess).

Для того щоб ці файли .htaccess можна було використовувати, необхідні відповідні налаштування головного конфігураційного файлу (значення директиви AllowOverride має бути встановлено All). Як правило, переважна більшість хостерів дозволяють використовувати свої файли .htaccess.

1. Забороняємо завантаження файлів з зовнішніх сайтів

Вам набридли люди, які розміщують картинки, опубліковані на вашому сайті - на своїх ресурсах, тим самим витрачаючи ваш трафік і створюючи непотрібну навантаження на ваш хостинг? Даний код, розміщений в кінці вашого файлу .htaccess, дозволить запобігти завантаження ваших зображень - сторонніми сайтами.

	 Options + FollowSymlinks
	 # Забороняємо завантаження файлів з зовнішніх сайтів
	 RewriteEngine On
	 RewriteCond% {HTTP_REFERER}! ^ $
	 RewriteCond% {HTTP_REFERER}! ^ Http: // (www.)? Site.com/ [nc]
	 RewriteRule. *. (Gif | jpg | png) $ http://site.com/stop.gif[nc] 

Не забудьте змінити site.com на ваше доменне ім'я і створити зображення stop.gif, яке буде показано замість запитаної картинки.

2. Блокуємо всі запити від небажаних User Agents

Це правило дозволяє заблокувати небажані User Agent, які можуть бути потенційно небезпечними або просто перевантажувати сервер непотрібними запитами.

  # Блокуємо поганих ботів і роботів
 SetEnvIfNoCase user-Agent ^ FrontPage [NC, OR]
 SetEnvIfNoCase user-Agent ^ Java. * [NC, OR]
 SetEnvIfNoCase user-Agent ^ Microsoft.URL [NC, OR]
 SetEnvIfNoCase user-Agent ^ MSFrontPage [NC, OR]
 SetEnvIfNoCase user-Agent ^ Offline.Explorer [NC, OR]
 SetEnvIfNoCase user-Agent ^ [Ww] eb [Bb] andit [NC, OR]
 SetEnvIfNoCase user-Agent ^ Zeus [NC]
 Order Allow, Deny
 Allow from all
 Deny from env = bad_bot

Список User Agent браузерів, роботів і павуків пошукових машин, веб-каталогів, менеджерів закачувань, спам-ботів і поганих ботів можна знайти на сайті List of User-Agents.

3. Забороняємо доступ для всіх, крім зазначених IP-адрес

Якщо з якої-небудь причини, ви хочете заборонити всім або дозволити тільки окремим IP-адресами доступ до вашого сайту - додайте цей код в ваш .htaccess файл:

	 # Забороняємо доступ для всіх, крім зазначених IP-адрес
	 ErrorDocument 403 http://www.domainname.com
	 Order deny, allow
	 Deny from all
	 Allow from 124.34.48.165
	 Allow from 102.54.68.123 

Не забудьте змінити domainname.com на ваше доменне ім'я.

4. Налаштовуємо SEO-Friendly 301 Redirect

Якщо ви перенесли доменне ім'я (або свій підсайт) або хочете перенаправляти користувача на певну сторінку (сторінки), без санкцій з боку пошукових машин, використовуйте цей код:

	 # Налаштовуємо SEO-Friendly 301 Redirect
	 Redirect 301 /1/file.html http://www.site.com/2/file.html 

Не забудьте змінити site.com на ваше доменне ім'я, а /1/file.html і /2/file.html на відповідні директорії і сторінки.

5. Створюємо власні сторінки помилок

Вам набрид стандартний вигляд сторінок помилок? Немає проблем - за допомогою наступного коду, ви легко можете створити свою сторінку і показувати користувачеві саме її:

	 ErrorDocument 401 /error/401.php
	 ErrorDocument 403 /error/403.php
	 ErrorDocument 404 /error/404.php
	 ErrorDocument 500 /error/500.php 

<Не забудьте створити в кореневій директорії вашого сервера папку error і розмістити в ній відповідні файли. / P>

6. Створюємо чорний список IP адрес

Втомилися від спам-коментарів або певного користувача? Просто заблокуйте його IP за допомогою наступного коду, який додається в .htaccess файл.

	 # Створюємо чорний список IP адрес
	 allow from all
	 deny from 145.186.14.122
	 deny from 124.15. 

Дізнатися IP адреси коментаторів можна або в логах Apache або за допомогою сервісів статистики. У багатьох CMS є свої вбудовані засоби для моніторингу адрес відвідувачів. Наприклад, в Drupal IP- адреси коментаторів можна побачити в адміністративній панелі - Звіти.

7. Встановлюємо e-mail адресу за замовчуванням для адміністратора

Використовуйте цей код, для того, щоб встановити e-mail адресу за замовчуванням для адміністратора сервера.

	 # Встановлюємо e-mail адресу за замовчуванням для адміністратора
	 ServerSignature EMail
	 SetEnv SERVER_ADMIN [email protected] 

Не забудьте замінити [email protected] - своїм e-mail адресою.

8. Захищаємо певний файл

Нижченаведений код дозволяє вам заборонити доступ до будь-якого файлу - при запиті буде видаватися помилка 403. Для прикладу я закрив доступ до самого файлу htaccess, підвищивши загальний рівень безпеки сайту.

  # Захищаємо .htaccess файл
 order allow, deny
 deny from all

9. Стискаємо елементи за допомогою mod_deflate

В якості альтернативи компресії файлів за допомогою Gzip, ви можете використовувати mod_deflate (імовірно працює швидше). Додайте наступний код на початку вашого файлу .htaccess (також ви можете додати перерахування .jpg | .gif | .png | .tiff | .ico):

  # Стискаємо елементи за допомогою mod_deflate
 SetOutputFilter DEFLATE

10. Додаємо термін життя в заголовки

Даний код дозволяє додати терміни життя в заголовки:

  # Додаємо термін життя в заголовки
 Header set Expires «Wed, 21 May 2010 20:00:00 GMT»

11. Встановлюємо сторінки за замовчуванням

Зазвичай сторінкою за замовчуванням є index.html, однак за допомогою цього коду ви можете налаштувати за замовчуванням будь-яку іншу сторінку.

	 # Встановлюємо альтернативну сторінку за замовчуванням
	 DirectoryIndex about.html 

12. Захищаємо паролем папки і файли

Ви можете включити перевірку пароля для доступу в будь-яку папку або файл на вашому сервері, використовуючи цей код:

  # Захист паролем файлу
 AuthType Basic
 AuthName «Prompt»
 AuthUserFile /pub/home/.htpasswd
 Require valid-user
 # Захист паролем папки
	 resides
	 AuthType basic
	 AuthName «This directory is protected»
	 AuthUserFile /pub/home/.htpasswd
	 AuthGroupFile / dev / null
	 Require valid-user 

Для того, щоб організувати доступ до файлу за паролем, необхідно створити файл .htpasswd і внести в нього пару логін-пароль в форматі user: password.

Однак в цьому випадку паролі будуть зберігається у відкритому вигляді, що не дуже добре з точки зору безпеки. Тому оптимальніше пароль зашифрувати. Для цього скористайтеся сервісами генерації записів в файли .htpasswd. Наприклад, ось таким .

У нашому прикладі файл з паролями доступу лежить в кореневій директорії сайту і називається .htpasswd. Директорія вказується від кореня сервера і якщо шлях буде некоректним - Apache, не отримавши доступу до файлу, відмовить в доступі до папки будь-якому користувачеві - в тому чілсе і тому, який ввів правильну пару логін: пароль.

13. перенаправляє зі старого домену - на новий

Використовуючи .htaccess, ви можете налаштувати перенаправлення зі старого доменного імені на нове, додавши наступний код:

	 # Перенаправляти зі старого домену old.com - на новий
	 RewriteEngine On
	 RewriteRule ^ (. *) $ Http://www.new.com/$1 [R = 301, L] 

Перенаправлення використовується в тому випадку, якщо ви переносите свій існуючий сайт на нове доменне ім'я. У цьому випадку будь-який користувач, який набере в адресному рядку www.old.com - буде перенаправлений на www.new.com.

14. Підсилюємо кешування

Використання цього правила не означає пряме прискорення завантаження вашого сайту. Воно призначене для більш швидкого завантаження сайту - для вже заходив на нього відвідувача, шляхом відправки статусу 304 для тих елементів, які не оновлювалась.

  # Підсилюємо кешування
 FileETag MTime Size
 ExpiresActive on
 ExpiresDefault «access plus 1 year»

Таким чином, при повторному завантаженні сторінки браузер відвідувача не буде заново завантажувати зображення, скрипти або CSS, а виведе ті файли, які вже зберігаються в його кеші. Ви можете змінити термін життя кеша, шляхом коригування його значення в роках (year), місяцях (month) або, наприклад - секундах (seconds). У прикладі вказано 1 рік.

15. Стискаємо компоненти сайту шляхом включення Gzip

При використанні Gzip, сервер буде стискати файли перед відправкою їх користувачеві, через що ваш сайт буде завантажуватися швидше.

	 # Стискаємо компоненти сайту шляхом включення Gzip
	 AddOutputFilterByType DEFLATE text / html text / plain ..
	 .. Text / xml application / xml application / xhtml + xml .. 
	 .. Text / javascript text / css application / x-javascript
	 BrowserMatch ^ Mozilla / 4 gzip-only-text / html
	 BrowserMatch ^ Mozilla / 4.0 [678] no-gzip
	 BrowserMatch bMSIE! No-gzip! Gzip-only-text / html 

Зверніть увагу, що включення компресії призведе до більшого навантаження на процесор сервера. Тут рядок AddOutputFilterByType записується в одну довгу рядок з двома нижніми (все .. потрібно прибрати).

16. Видаляємо «category» з URL

Щоб відредагувати ярлик yourdomain.com/category/blue на yourdomain.com/blue, просто додайте наступний код в кінці вашого .htaccess файлу.

	 # Видаляємо category з URL
	 RewriteRule ^ category /(.+)$ http://www.site.com/$1 [R = 301, L] 

Не забудьте змінити www.site.com на ваше доменне ім'я.

17. Забороняємо перегляд вмісту папки

Для того, щоб обмежити доступ до тек, які можуть містити різноманітну інформацію і для забезпечення безпеки сервера, додайте цей код в файл .htaccess

	 # Забороняємо перегляд вмісту папки
	 Options All -Indexes 

18. перенаправляє свою RSS-стрічку на FeedBurner

Покажемо як це можна зробити на прикладі RSS-стрічки Drupal на сервіс Google Feedburner.

  # Перенаправляти RSS-стрічку Drupal на FeedBurner
 RewriteEngine on
 RewriteCond% {HTTP_USER_AGENT}! FeedBurner [NC]
 RewriteCond% {HTTP_USER_AGENT}! FeedValidator [NC]
 RewriteRule ^ rss.xml $ http://feeds.feedburner.com/yourfeed [R = 302, NC, L]

Спочатку необхідно зареєструвати стрічку свого блога в сервісі Feedburner . Далі не забудьте замінити yourfeed на ім'я вашої стрічки вже в Feedburner.

19. Забороняємо коментарі від користувачів без Referrer

Найчастіше спам-боти звертаються безпосередньо до файлу коментарів, наприклад до wp-comments-post.php, не заходячи на сторінки записів вашого блогу. Наведений нижче код дозволяє заблокувати коментарі, надіслані користувачами, які прийшли «з нізвідки», дозволяючи коментувати тільки тим читачам, які перейшли на сторінку вашого блогу з будь-яких інших сторінок (наприклад, результатів пошуку Google).

	 # Забороняємо коментарі від користувачів без Referrer
	 RewriteEngine On
	 RewriteCond% {REQUEST_METHOD} POST
	 RewriteCond% {REQUEST_URI} .comment \ / reply \ / *
	 RewriteCond% {HTTP_REFERER}!. * Yourblog.com. * [OR]
	 RewriteCond% {HTTP_USER_AGENT} ^ $
	 RewriteRule (. *) ^ Http: //% {REMOTE_ADDR} / $ [R = 301, L] 

Не забудьте замінити yourblog.com на доменне ім'я вашого блогу.

20. Прибираємо розширення файлу з URL

Даний код дозволяє видалити розширення файлу .php (ви можете змінити його на будь-яке інше, наприклад - .html) з URL-адрес сторінок.

	 # Прибираємо розширення файлу з URL
	 RewriteRule ^ (([^ /] + /) * [^.] +) $ /$1.php [L] 

21. Захищаємо сайт

Даний код дозволяє захистити сайт від scripts enjection і небажаних модифікацій _REQUEST і / або GLOBALS:

  # Включаємо відстеження сім-посилань
 Options + FollowSymLinks
 # Запускаємо url_rewriting
 RewriteEngine On
 # Блокуємо всі посилання, що містять <script>
 RewriteCond% {QUERY_STRING} (\ <|% 3C). * Script. * (\> |% 3E) [NC, OR]
	 # Блокуємо всі скрипти, які намагаються змінити змінні PHP Globals:
	 RewriteCond% {QUERY_STRING} GLOBALS (= | \ [| \% [0-9A-Z] {0,2}) [OR]
	 # Блокуємо всі скрипти, які намагаються змінити змінну _REQUEST:
	 RewriteCond% {QUERY_STRING} _REQUEST (= | \ [| \% [0-9A-Z] {0,2})
	 # Перенаправляти всі подібні на сторінку з помилкою 403 - заборонено
	 RewriteRule ^ (. *) $ Index.php [F, L] 

22. перенаправляє користувача за допомогою директиви RedirectMatch і регулярних виразів

Ще одна корисна директива, рекомендована до використання - RedirectMatch. Цитата: «Ця директива дозволяє в якості запитуваної адреси використовувати регулярний вираз (пересилання не« з документа ", а" з усіх документів, типу ... "). Редирект зовнішній - браузеру повідомляється про необхідність завантажити іншу сторінку.

синтаксис:

	 RedirectMatch [status] regexp URL 

Значення статусів (код повернення веб-сервера) стандартні:

permanent (301 - постійний редирект), temp (302 - тимчасовий редирект, приходьте ще), seeother (303 - летимо туди, там багато смачного), gone (410 - видалений назавжди).

приклад:

Те ж перенаправлення зі старого домену на новий без підключення RewriteEngine:

	 RedirectMatch 301 ^ (. *) $ Www.domainname.com/$1 

Від себе додам, що ви можете використовувати не тільки http-статуси, а й інші умови:

	 RedirectMatch (. *) \. Gif $ http: //www.myserver.com$1.png
	 RedirectMatch (. * \. Jpg) $ http: //www.myanother.com$1 

Обов'язково зробіть резервну копію файлу .htaccess до внесення змін і перевірте працездатність всього сайту - після додавання нових рядків.

23. Захист від прямих посилань для зображень через .htaccess

Хотлінк (Hotlink) - вставка прямих посилань зображень або файлів з одного сайту на інші. Цей прийом використовується досить часто, ну наприклад, у вас на сервері не вистачає місця для зберігання картинок і ви користуєтеся яким-небудь безкоштовним сервісом для зберігання файлів зображень, тобто завантажуєте картинку, отримуєте URL і вставляєте його на свій сайт.

У підсумку: ви зберігаєте місце для вашого сайту і використовуєте пропускну здатність хостингу для картинок, але це вже не ваша справа. Але ось як бути, якщо хтось вирішив, що ваш сайт можна використовувати як подібний сервіс.

Як не стати безкоштовним постачальником зображень і файлів?

Чи є захист від цього? Так є! Щоб заборонити іншим сайтам користуватися вашим трафіком і / або просто вказувати прямі посилання на ваші файли (картинки), то додайте в ваш .htaccess файл наступні рядки:

	 # Заборонити іншим сайтам використовувати прямі посилання на ваші картинки
	 RewriteCond% {HTTP_REFERER}! ^ $
	 # Далі список дозволених доменів
	 RewriteCond% {HTTP_REFERER}! ^ Http (s)?: // (Www.)? Sitename.ru. * $ [NC]
	 RewriteCond% {HTTP_REFERER}! ^ Http (s)?: // (Www.)? Sitename.ru: 80. * $ [NC]
	 # IP сайту (домену)
	 RewriteCond% {HTTP_REFERER}! ^ Http (s)?: //111.111.111.111.*$ [NC]
	 RewriteCond% {HTTP_REFERER}! ^ Http (s)?: //111.111.111.111: 80. * $ [NC]
	 RewriteCond% {HTTP_REFERER}! ^ Http (s)?: // (Www.)? Yandex.ru [NC]
	 RewriteCond% {HTTP_REFERER}! ^ Http (s)?: // (Www.)? Google.  [NC]
	 # RewriteCond% {HTTP_REFERER}! ^ Http (s)?: // (Www.)? Домен_дружественного сайта.ru [NC]
	 RewriteCond% {HTTP_REFERER}! Search? Q = cache [NC]
	 # Формати файлів, для яких встановлюється захист
	 # Виводить помилку 403
	 # RewriteRule \. (Jpe? G | bmp | gif | png | css | mov | swf | dcr | exe | rar | avi | vob | zip | pdf | txt | doc | flv | mp3 | mp4) $ - [NC, F, L]
	 # Або показує Спецмалюнок замість зазначеного
	 RewriteRule. * \. (Jpe? G | bmp | gif | png) $ files / images / nohotlink.jpg [NC, L] 

У підсумку всі інші сайти отримають помилку 403 Forbidden (тобто Доступ заборонений) і ваша пропускна здатність більше «не працює на інших».

24. ImageCache і захист від хотлінк через .htaccess

Для ImageCache попередній пункт працювати не буде, тому додаємо такі настройки:

  SetEnvIfNoCase Referer «^ $» local_ref = 1
 # Allowed domains
 # Далі дозволені домени
 SetEnvIfNoCase Referer «^ http: // (www \.)? Domain \ .ru» local_ref = 1
 SetEnvIfNoCase Referer «^ http: // (www \.)? Domain \ .com» local_ref = 1
 # File extensions that you want to protect
 # Розширення файлів, які потрібно захистити
 Order Allow, Deny
 Allow from env = local_ref

Тепер у нас є і захист від хотлінк і модуль ImageCache - разом вони працюють чудово. Одне «але» - таким способом, як ви бачите не вийде видавати іншу картинку; тільки захист своїх зображень, що і є основною метою.