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 linking2.8 Блокиране на достъпа от определен IP адрес или мрежа2.9 Уведомяване на посетителите за текуща реконструкция2.10 Блокиране на достъпа до сайта според часа2.11 Принудително използване на www.your_domain.com2.1 Забрана за достъп до определени файлове ^Със следния код можете да забраните достъпа до файлове с определени разширения - в този пример става дума за всички файлове, които имат разширение .txt. В случая посетителите ще виждат страница с грешка "403 Forbidden" вместо съдържанието на .txt файла. <Files ~ "\.txt$">Order Allow,DenyDeny from All</Files>А ако искате да забраните достъпа например до всички .txt .doc .rtf .log .fla .psd файлове, използвайте следния код:<FilesMatch "\.(txt|doc|rtf|log|fla|psd)$">Order Allow,DenyDeny from all</FilesMatch>2.2 Добавяне на Content-Type хедър към вашите страници ^За да добавите Content-Type хедър, така че сървърът да съобщава за кодирането на всяка ваша страница на браузъра, използвайте директивата AddDefaultCharset. Ето два примера:AddDefaultCharset UTF-8AddDefaultCharset ISO-8859-12.3 Използване на определена времева зона ^Чрез следния ред можете да принудите PHP скриптовете ви да използват вашата времева зона вместо тази на сървъра:
SetEnv TZ Europe/London
Пълен списък с поддържаните часови зони можете да намерите на следния адрес: http://php.net/manual/bg/timezones.php2.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.htmlErrorDocument 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 OnRewriteCond %{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 OnRewriteCond %{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 OnRewriteCond %{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 OnRewriteCond %{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,denydeny from 64.14.68.138deny from 64.14.68.139allow from all• Блокиране на достъпа от определен определена мрежаМожете да забраните и цяла мрежа. За да блокирате например всички IP адреси, започващи с 64.14.68. (т.е. мрежата 64.14.68), използвайте следния код:order allow,denydeny from 64.14.68.allow from all• Блокиране на достъпа от всички IP адреси и мрежиАко желаете да забраните достъпа на всички, използвайте следния ред във вашия .htaccess файл:deny from allОсвен IP адреси, в .htaccess файла можете да използвате и имена на домейни:deny from example.comА за да блокирате достъпа от всички поддомейни на example.com, използвайте:deny from .example.com2.9 Уведомяване на посетителите за текуща реконструкция ^Ако сте решили, че ще правите реконструкция на вашия сайт и желаете вместо да блокирате достъпа до нея, да позволите на посетителите да разберат, че сайта ви подлежи на реконструкция, е нужно да изготвите един файл maintenance.html в главната ви директория www. Неговотo съдържание ще се показва на посетителите, докато сайтът ви не е достъпен. След това добавете следните редове в .htaccess файла, който се намира в главната директория www:
RewriteEngine OnRewriteCond %{REQUEST_URI} !/maintenance.html$RewriteRule .* /maintenance.html [R=307,L]2.10 Блокиране на достъпа до сайта според часа ^Ако желаете посетителите ви да имат достъп до вашия сайт само в работното ви време (7:00 - 19:00 ч.), използвайте следния код:RewriteEngine OnRewriteCond %{TIME_HOUR}%{TIME_MIN} >1900 [OR]RewriteCond %{TIME_HOUR}%{TIME_MIN} <0700 RewriteRule ^.*$ - [F,L]Ако желаете да забраните достъп до сайта ви в обедната си почивка, използвайте следния код, който ще забрани достъпа от 12:00 до 12:59 през деня:RewriteEngine OnRewriteCond %{TIME_HOUR} ^12$RewriteRule ^.*$ - [F,L]2.11 Принудително използване на www.your_domain.com ^Ако желаете посетителите на вашия сайт винаги да бъдат препращани към www.your_domain.com, когато направят заявка до your_domain.com или до някой от паркираните ви домейни, използвайте следния код:RewriteEngine OnRewriteCond %{REQUEST_URI} !^/robots\.txt$RewriteCond %{HTTP_HOST} !^www\.your_domain\.com$ [NC]RewriteRule ^(.*)$ http://www.your_domain.com/$1 [R=301,L]