<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BulTux &#187; htacces</title>
	<atom:link href="http://www.bultux.org/tag/htacces/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bultux.org</link>
	<description>Български блог посветен на свободния софтуер и новото от Linux света</description>
	<lastBuildDate>Sat, 03 Dec 2011 08:18:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Използване на .htaccess файлове</title>
		<link>http://www.bultux.org/tutorials/izpolzwane-na-htaccess-fajlowe</link>
		<comments>http://www.bultux.org/tutorials/izpolzwane-na-htaccess-fajlowe#comments</comments>
		<pubDate>Wed, 03 Mar 2010 11:58:40 +0000</pubDate>
		<dc:creator>Владимир Колев</dc:creator>
				<category><![CDATA[Уроци]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[fancyindexing]]></category>
		<category><![CDATA[htacces]]></category>

		<guid isPermaLink="false">http://www.bultux.org/?p=269</guid>
		<description><![CDATA[<img src="http://bultux.org/wp-content/plugins/category-icons/cats/tuts.png" width="22" height="22" alt="" title="Уроци" /><br/>Всеки имащ собствена страница и работещ с Apache сървър е чувал за тези файлове, това което правят реално е промяна  на настройките за определена директория от вашия уебсървър. .htaccess файловете се добавт в самата директория на сайта ви и конфигурационните директиви са валидни както за нея така и за поддиректориите й. Това, което ви позволяват [...]]]></description>
			<content:encoded><![CDATA[<img src="http://bultux.org/wp-content/plugins/category-icons/cats/tuts.png" width="22" height="22" alt="" title="Уроци" /><br/><p style="text-align: justify;"><img class="alignleft size-full wp-image-278" title="apache" src="http://www.bultux.org/wp-content/uploads/2010/03/apache.png" alt="" width="84" height="98" />Всеки имащ собствена страница и работещ с <a href="http://httpd.apache.org/" target="_blank">Apache сървър</a> е чувал за тези файлове, това което правят реално е промяна  на настройките за определена директория от вашия уебсървър. .htaccess файловете се добавт в самата директория на сайта ви и конфигурационните директиви са валидни както за нея така и за поддиректориите й. Това, което ви позволяват е по-лесно конфигуриране на определени директории, като могато да пренаписват настройките зададени в httpd.conf. По този начин ако използвате уебхостинг и нямате достъп до конфигурационния файл на Apache пак можете да зададете някои специфични настройки. Конфигурационните директиви, които ще разгледаме в тази статия са следните:</p>
<ul style="text-align: justify;">
<li><strong>Options +/-Indexing</strong> &#8211; разрешаване на листването на файловете в директория и опциите, които можете да използвате към това</li>
<li><strong>mod_rewrite</strong> &#8211; задаване на красиви връзки в страницата (премахване на .html и .php)</li>
<li><strong>AuthType</strong> &#8211; Задаване на парола за достъп до дадена директория</li>
<li><strong>allow/deny</strong> &#8211; блокиране на IP адреси</li>
<li><strong>ErrorDocument</strong> &#8211; собствени страници за грешки</li>
</ul>
<p style="text-align: justify;">Разбира се, с .htaccess файловете можете да постигнете още много неща, но смятам, че след като разберете основата и простите трикове лесно ще можете да разберете и останалото за тези файлове в <a href="http://httpd.apache.org/docs/2.1/howto/htaccess.html" target="_blank">Apache уроците</a>.</p>
<p><span id="more-269"></span></p>
<h2>Списък със съдържанието на директория</h2>
<p style="text-align: justify;">Вероятно сте забелязали в много сървъри, че дори и в странците на дистрибуциите как се показва списък с файловете на сървъра като по този начин се избягва използването на php скриптове за показване на списък с файлове и поддиректории. Това можете да постигнете и с няколко опции в един .htaccess файл. Нека започнем от това как да разрешите показването на списък със съдържанието на директория.</p>
<p style="text-align: justify;">За да разрешите тази опция първо трябва да добавите следното във вашия .htaccess файл:</p>
<p>[bash]Options +Indexes[/bash]</p>
<p style="text-align: justify;">Реално това само е достатъчно, за да покажете списък с файловете в директорията. Но на много хостинг сървъри това, което ще получите е един най-елементарен списък с файлове &#8211; без размер, без разширение на файловете, без допълнителна информация. Ако това е достатъчно за вас можете да оставите нещата до тук. В дрги сървъри опциите, които следват са добавени още в httpd.conf така, че списъка ще бъде показан доста по-разширено. За пример ще дам директорията с <a href="http://bultux.org/irc_logs/" target="_blank">IRC логове на GooBot от #ubuntu-bg</a>.Както ще видите на страницата има списък, показващ подробности за файловете в директорията, но има и допълнителна информация както и картинка. Тези неща се разрешават със следната директива във файла:</p>
<p>[bash]IndexOptions FancyIndexing[/bash]</p>
<p style="text-align: justify;">Този ред разрешава подробния списък и е основен за допълнителни разширения към списъка като добавяне на опсиания към файловете, добавяне на икони за определени файлови формати. За повече информация за опциите към <code>FancyIndexing</code> можете да погледнете <a href="http://httpd.apache.org/docs/2.2/mod/mod_autoindex.html" target="_blank">документацията за mod_autoindex</a>.</p>
<p style="text-align: justify;">Как обаче към този списък да добавиме и информация, която да се показва над списъка и под списъка? Това става съответно с конфигурационните директиви <code>HeaderName</code> и <code>ReadmeName</code>. Създайте файловете header.html и reader.html (разбира се могат да имат и други наименования) и ги качете в директорията. След което в .htaccess файла добавете информацита:</p>
<p>[bash]HeaderName header.html<br />
ReadmeName reader.html[/bash]</p>
<p style="text-align: justify;">Във файловете не е необходимо добавянето на <code></code>, тъй като те са добавени автоматично от Apache сървъра. Но тези файлове ще се виждат при показването на списъка. За целта можем да ги игнорираме. Това ще стане с директивата <code>IndexIgnore</code> като можете да забраните всички .html файлове или точно определени. В директорията с логове, където смятам да показвам само текстови файлове няма смисъл да показвам каквито и да било .html файлове:</p>
<p>[bash]IndexIgnore *.html[/bash]</p>
<p style="text-align: justify;">Като казах, че в директорията ще показвам текстови фйалове тук идва един проблем, с който се сблъсках. Файловете макар и записани в UTF-8 кодиране на текста бяха показвани с друго, което е зададено по подразбиране от сървъра. Решението е добавянето на директивата <code>AddCharset</code> по следния начин за всички текстови файлове:</p>
<p>[bash]AddCharset UTF-8 .txt[/bash]<br />
А ако искате това да е валидно за всички файлове:<br />
[bash]AddCharset UTF-8 *[/bash]</p>
<h2>Използване на mod_rewrite</h2>
<p style="text-align: justify;">За да разрешите самото презаписване на връзките във вашата страница е важно да добавите първо включването на този Apache модул:</p>
<p>[bash]Options +FollowSymlinks<br />
RewriteEngine on[/bash]</p>
<p style="text-align: justify;">За да разберете дали сървърът, който ползвате има разрешен mod_rewrite или дали е поне разрешен можете да проверите в нормалното <code>phpinfo()</code>. Създавате файл phpinfo.php, качвате го на сървъра и го стартирате през бразуъра.<br />
Опцията <code>+FollowSymlinks</code> също е задължителна, за да можете да пишете правила за презаписване. Така приемам, че mod_rewrite е разрешен. Самото използване на RewriteEngine изисква и малко познания за RegEx (регулярни изрази), които в този урок няма да бъдат покрити. Ще ви покажа само как да премахнете .html или .php от връзките, тъй като останлото можете да го намерите като готово в интернет или пък като прегледаде съдържанието на .htaccess файла на някоя CMS система.<br />
Премахване на .html от линковете:</p>
<p>[bash]RewriteRule ^([^\.]+)$ $1.html [NC,L][/bash]</p>
<p style="text-align: justify;">Но при този пример какво ще се получи ако същевременно със името на .html файла имате и такава директория? Това означава, че ще трябва да добавиме условие, което ще проверява за подобни неща. Това става с директивата <code>RewriteCond</code> преди да добавиме правилото за презапис:</p>
<p>[bash]RewriteCond %{SCRIPT_FILENAME} !-d[/bash]<br />
Заменяне на .html с .php окончание във връзките (ако искате да заблудите някого, че ползвате .php <img src='http://www.bultux.org/wp-content/plugins/tango-smilies/tango/face-smile.png' alt=':-)' class='wp-smiley' />  )<br />
[bash]RewriteRule ^(.*)\.php$ $1.html [NC,L][/bash]</p>
<h2>Защита на директория с парола</h2>
<p style="text-align: justify;">Ако искате дадена директория да бъде достъпна само за определени потребители това можете да направите с допълнителен файл, който може да бъде наречен .htpasswd и е за предпочитане да бъде поставен в директория, до която няма достъп чрез HTTP REQUEST. За пример ако имате сървър и видимата за HTTP заявки директория е /var/www просто можете да създадете директория /var/secret, която няма да бъде видима и в която можете да поставите файал с потребители и пароли /var/secret/.htpasswd Разбира се файла може да се намира и в директория, която е видиме за посетителите на вашата страница, но тогава трябва да се уверите, че те няма да виждат този файл и той няма да бъде достъпен за техните очи (погледнете IndexIgnore). Нека първо създадем файла. Съдържанието му трябва да има следния формат:</p>
<p>[plain]user:pass<br />
user2:pass2<br />
&#8230;.[/plain]<br />
След като разполагаме с файла в .htaccess трябва да добавим следното:<br />
[bash]AuthType basic<br />
AuthUserFile /var/secret/.htpasswd<br />
AuthName &quot;Only for dudes&quot;<br />
require valid-user[/bash]</p>
<p style="text-align: justify;">Какво всъщност означава това. Първия ред показва, че искаме просто разрешение за достъп (за разлика от ДБ или дайджест разрешение например). с <code>AuthUserFile</code> посочваме в кой файл се намира информацията за потребители и техните пароли. С <code>AuthName</code> оказваме как ще се казва диалога, който изисква потребителско име и парола. И директивата <code>require valid-user</code> оказва, че достъп ще до директорията ще получат само тези въвели верни име и парола. Последната директива е и най-интересна, защото използвайки един .htpassd файл, можете да ограничите определени директории само до определени потебители:</p>


<div class="wp-geshi-highlight"><div class="apache"><pre class="de1"><span class="kw1">require</span> <span class="kw1">user</span> user2 user4</pre></div></div>


<p>С това разрешаваме достъпа само на потребителите user2 и user4.</p>
<h2>Блокиране на IP адреси</h2>
<p style="text-align: justify;">Блокирането на IP адреси е също удобен вариант ако има конкретни такива, които не желаете да имат достъп до вашата страница. Имайте предвид, че тази мярка не е перфектна и може да бъде заобиколена. Даже бих си позволил да кажа, че е напълно излишна, но пък защо да не я знаете. Би била позлезна ако използвате сървъра в локална мрежа и искате да ограничите шефа да вижда сървъра <img src='http://www.bultux.org/wp-content/plugins/tango-smilies/tango/face-raspberry.png' alt=':-P' class='wp-smiley' /> .</p>
<p style="text-align: justify;">Самото блокиране е директива <code>order allow, deny</code> със списък от разрешени и забранени IP-та. За повече яснота ето и пример:</p>
<p>[bash]order allow, deny<br />
deny 192.168.1.4<br />
deny .microsoft.com<br />
deny 79.79.79.<br />
allow from all[/bash]</p>
<p style="text-align: justify;">С deny пред всеки адрес или домейн оказваме, че те нямат достъп. В последния deny 79.79.79. блокираме всички IP-та, които започват с 79.79.79. По същия начин можем да блокираме и всички IP-та започващи с 53. (точката е част от IP-то). Разбира се можем да направим и забрана за всички:</p>
<p>[bash]deny from all[/bash]<br />
и вместо списък със забранени IP адреси да сложим списък с разрешени IP адреси.</p>
<h2>Собствени ERROR страници</h2>
<p style="text-align: justify;">Задаването на собствени страници за грешка става с директивата <code>ErrorDocument</code>. С нея можете да окажете при каква грешка, кой файл да показва. Доста удобно ако желаете да разкрасите 404 грешката за липсващ такъв файл. Това става по следния начин:</p>
<p>[bash]ErrorDocument 404 /errors/funyerror.html[/bash]<br />
Формата е същия, за добавяне на страници и за други грешки просто:<br />
[bash]ErrorDocument грешка /път/до/файл[/bash]</p>
<p style="text-align: justify;">Надявам се статията да е била полезна. Тя не пoкрива по-задълбоченото разглеждане на този вид файлове, тъй като самото им използване се препоръчва да бъде избягвано. Използването на този вид файлове е по-скоро предназначено за хората, ползващи платен хостинг, където нямат собствен php.ini файл и това е единствения начин да разрешат използването на определени функции.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bultux.org/tutorials/izpolzwane-na-htaccess-fajlowe/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

