ТЕХНИЧЕСКА ПОДДРЪЖКА ЗА УЕБ ХОСТИНГ
     
 

Използване на .htaccess

1. Какво е .htaccess?

Файлът .htaccess служи за конфигурация на уеб сървъра Apache и чрез него могат да бъдат променяни редица функции на сървъра. Зададените настройки важат за директорията, в която се намира .htaccess файла, и нейните поддиректории. Файлът задължително започва със знака точка и може да бъде създаден лесно в секция Файлове на Контролния панел. За да свалите локално конфигурационния файл, използвайте FTP програма и след това можете да го редактирате с текстов редактор. Имайте предвид, че повечето FTP програми не показват по подразбиране файлове с имена започващи с точка. За да видите .htaccess файловете, е нужно да активирате функцията "Show Hidden Files" в настройките на вашата FTP програма.


2. Полезни примери

2.1 Забрана за достъп до определени файлове
2.2 Добавяне на Content-Type хедър към вашите страници
2.3 Използване на определена времева зона
2.4 Принудително сваляне на файл
2.5 Забрана за достъп до съдържанието на вашите директории
2.6 Създаване на собствени Еrror страници
2.7 Предотвратяване на hot linking
2.8 Блокиране на достъпа от определен IP адрес или мрежа
2.9 Уведомяване на посетителите за текуща реконструкция
2.10 Блокиране на достъпа до сайта според часа
2.11 Принудително използване на www.your_domain.com


2.1 Забрана за достъп до определени файлове
^

Със следния код можете да забраните достъпа до файлове с определени разширения - в този пример става дума за всички файлове, които имат разширение .txt. В случая посетителите ще виждат страница с грешка "403 Forbidden" вместо съдържанието на .txt файла.
<Files ~ "\.txt$">
Order Allow,Deny
Deny from All
</Files>
А ако искате да забраните достъпа например до всички .txt .doc .rtf .log .fla .psd файлове, използвайте следния код:
<FilesMatch "\.(txt|doc|rtf|log|fla|psd)$">
Order Allow,Deny
Deny from all
</FilesMatch>

2.2 Добавяне на Content-Type хедър към вашите страници ^

За да добавите Content-Type хедър, така че сървърът да съобщава за кодирането на всяка ваша страница на браузъра, използвайте директивата AddDefaultCharset. Ето два примера:
AddDefaultCharset UTF-8
AddDefaultCharset ISO-8859-1
2.3 Използване на определена времева зона ^

Чрез следния ред можете да принудите PHP скриптовете ви да използват вашата времева зона вместо тази на сървъра:

SetEnv TZ Europe/London

Пълен списък с поддържаните часови зони можете да намерите на следния адрес: http://php.net/manual/bg/timezones.php


2.4 Принудително сваляне на файл ^

Този пример задава условието файлове с изброените разширения да не се отварят в браузъра или с допълнителни програми като QuickTime, Adobe Reader и др., а да се появява прозорец със запитване къде да бъдат съхранени:
<FilesMatch "\.(mov|mp3|jpg|pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>

2.5 Забрана за достъп до съдържанието на вашите директории ^

Създайте .htaccess файл с реда по-долу, ако например нямате index страница и искате да забраните показването на всички файлове в директорията. Така никой освен вас няма да знае какво е съдържанието на дадената директория.
Options -Indexes
Същият ефект би могъл да бъде постигнат и чрез създаването на празен index.html файл в дадената директория.

Ако все пак искате потребителите да виждат съдържанието на директориите ви освен определени типове файлове, които да останат скрити, използвайте код от следния вид:
IndexIgnore *.php *.htmlПо този начин всички ваши PHP и HTML файлове няма да бъдат листвани заедно с останалите.


2.6 Създаване на собствени Еrror страници ^

Ако не ви харесват стандартните страници за грешки, посредством .htaccess можете да създадете собствени. В следващия пример дефинираните страници за грешки са в директория "errors", намираща се в главната ви директория www.
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
Общият вид на всеки ред е: ErrorDocument <номер на http статус код> <път/до/файл>

Линкът до вашия документ за грешка може да сочи също така страница за грешка, намираща се на друг сайт:
ErrorDocument 404 http://another_domain.com/404.phpВместо линк или файл можете да зададете на .htaccess да показва текстово съобщение като използвате:
ErrorDocument 404 "This page was not found on this server"или HTML:
ErrorDocument 404 "<html><title>Not Found</title><body>This page was not found on this server.</body></html>"Важно: Забележете кавичките, които се поставят преди съобщението за грешка и които трябва да липсват в края на съобщението.

Baжно: Ако сами искате да дефинирате страницата за грешка 404, е нужно да изтриете missing.html документа от вашата главна директория www. Internet Explorer не зарежда страници за грешки, които са по-малки от 512 байта и нужно вашето съобщение за грешка да е по-голямо от 512 байта.


2.7 Предотвратяване на hot linking ^

Hot linking представлява директното използване на някои от файловете (най-често картинки), намиращи се на вашия сайт, от страна на друг сайт, най-често без ваше разрешение, като тези файлове стават част от съдържанието на чуждия сайт. Това причинява изразходен трафик от другите сайтове за ваша сметка или казано по друг начин - кражба на трафик.

Блокиране само на определени домейни

За да забраните hot linking на картинки от определени сайтове (в примера от not_your_domain.net, www.not_your_domain.net и not_your_domain.com, www.not_your_domain.com), като оставите на всички останали сайтове правото да използват hot linking, използвайте следния код, при който вместо картинката ще се показва грешка "403 Forbidden":
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://(www\.)?not_your_domain\.net/ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?not_your_domain\.com/ [NC]
RewriteRule \.(jpeg|JPEG|jpe|JPE|jpg|JPG|gif|GIF|png|PNG|tif|TIF|tiff|TIFF)$ - [F]

Блокиране на всички домейни освен определени

В следващия пример се предотвратява hot linking от всички сайтове с изключение на вашия домейн, където се намират картинките:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?your_domain\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule \.(jpeg|JPEG|jpe|JPE|jpg|JPG|gif|GIF|png|PNG|tif|TIF|tiff|TIFF)$ - [F]
Моля, имайте предвид, че ако имате паркирани домейни, трябва да добавите всеки един от тях в този код, за да важи това правило и за тях. Пример за един главен домейн и три паркирани:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?your_domain\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?your_parked_domain1\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?your_parked_domain2\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?your_parked_domain3\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule \.(jpeg|JPEG|jpe|JPE|jpg|JPG|gif|GIF|png|PNG|tif|TIF|tiff|TIFF)$ - [F]

Заместване на картинки

Този метод все още ще води до кражба на трафик, но ще защити вашите картинки. Моля, обърнете внимание, че някои програми (например phpBB) при това условие изглежда разпознават статус 302 като грешка и започват да правят многократни опити да презаредят, докато потребителят не зареди друга страница.

Със следния код отдалеченият сървър ще зареди изображението unknown.jpg от директорията images в главния ви поддомейн www вместо поисканите картинки:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?your_domain\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?your_parked_domain1\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule \.(jpeg|JPEG|jpe|JPE|jpg|JPG|gif|GIF|png|PNG|tif|TIF|tiff|TIFF)$ images/unknown.jpg [L]

2.8 Блокиране на достъпа от определен IP адрес или мрежа
^

• Блокиране на достъпа от определени IP адреси

Ако искате да забраните достъпа по HTTP от определени IP адреси (в примера 64.14.68.138 и 64.14.68.139), създайте .htaccess файл със следното съдържание:
order allow,deny
deny from  64.14.68.138
deny from 64.14.68.139
allow from all
• Блокиране на достъпа от определен определена мрежа

Можете да забраните и цяла мрежа. За да блокирате например всички IP адреси, започващи с 64.14.68. (т.е. мрежата 64.14.68), използвайте следния код:
order allow,deny
deny from 64.14.68.
allow from all
• Блокиране на достъпа от всички IP адреси и мрежи

Ако желаете да забраните достъпа на всички, използвайте следния ред във вашия .htaccess файл:
deny from allОсвен IP адреси, в .htaccess файла можете да използвате и имена на домейни:
deny from example.comА за да блокирате достъпа от всички поддомейни на example.com, използвайте:
deny from .example.com
2.9 Уведомяване на посетителите за текуща реконструкция
^

Ако сте решили, че ще правите реконструкция на вашия сайт и желаете вместо да блокирате достъпа до нея, да позволите на посетителите да разберат, че сайта ви подлежи на реконструкция, е нужно да изготвите един файл maintenance.html в главната ви директория www. Неговотo съдържание ще се показва на посетителите, докато сайтът ви не е достъпен. След това добавете следните редове в .htaccess файла, който се намира в главната директория www:

RewriteEngine On
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteRule .* /maintenance.html [R=307,L]

2.10 Блокиране на достъпа до сайта според часа
^

Ако желаете посетителите ви да имат достъп до вашия сайт само в работното ви време (7:00 - 19:00 ч.), използвайте следния код:
RewriteEngine On
RewriteCond %{TIME_HOUR}%{TIME_MIN} >1900 [OR]
RewriteCond %{TIME_HOUR}%{TIME_MIN} <0700
RewriteRule ^.*$ - [F,L]
Ако желаете да забраните достъп до сайта ви в обедната си почивка, използвайте следния код, който ще забрани достъпа от 12:00 до 12:59 през деня:
RewriteEngine On
RewriteCond %{TIME_HOUR} ^12$
RewriteRule ^.*$ - [F,L]

2.11 Принудително използване на www.your_domain.com
^

Ако желаете посетителите на вашия сайт винаги да бъдат препращани към www.your_domain.com, когато направят заявка до your_domain.com или до някой от паркираните ви домейни, използвайте следния код:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteCond %{HTTP_HOST} !^www\.your_domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.your_domain.com/$1 [R=301,L]