Файл htaccess создать: Как создать и правильно настроить файл htaccess? |

Содержание

Попытка номер раз создать почти идеальный htaccess / Хабр

    - Google выше ранжирует сайты, которые загружаются быстрее.
    - Если на eBay или Amazone увеличить время загрузки страниц на 9% они теряют 1% прибыли.
    - Сделать свой сайт быстрее, чтобы сэкономить на клиентском трафике и на числе обращений к серверу.

.htaccess — наш герой


Профессионалы знают, что такое htaccess.
Тем кто собираются уйти с народ.ру на php-хостинг только предстоит узнать, что это такое.
Те кто только что установил свои первые jooml’у или wordpress срочно должны узнать о нашем герое — htaccess

Зачем нам .htaccess ?


Представьте, что вы купили себе хостинг и кажется, почти обрели счастье. Но однажды (а может быть дважды, а может и трижды) ваш сайт перестает отвечать на запросы. Начинает медленно грузиться и вообще вести себя странно. А виртуальный хостинг это такая хитрая штука, что помимо вашего сайта на этом сервере находится ещё два десятка других сайтов. Все они разные по мощности, организованности и трафику. И когда ваш сосед по случайности, а может и умыслу запускает на своем хостинге сложные или избыточные в алгоритмах скрипты, это отзывается и на вас.

Или другой пример. Скажем ваш ресурс начинает набирать популярность, но переезжать на выделенный сервер ещё рано, а мощностей VPS уже не хватает. Вас очень может выручить htaccess.

А ещё htaccess может решить некоторые вопросы с безопасностью вашего сайта.

А ещё…


Оказывается в интернете много различной противоречивой информации относительно того как использовать .htaccess. Пришлось долго и нудно экспериментировать, чтобы понять что истинно, а что ложно. В большинстве случаев авторы советов в своих блогах забывают упомянуть, что для работы определенных условий нужен тот или иной модуль Апача.
Впрочем хватит слов, пора к делу. Попробуем создать почти идеальный .htaccess

1. Первой строкой задаем основные опции:

Options All -ExecCGI -Indexes -Includes +FollowSymLinks

Использовать опции очень удобно, когда у вас нет доступа к конфигурированию Апача или нужны разные настройки Апача для разных сайтов на одном сервере.

Опция -ExecCGI запрещает запуск CGI скриптов. Лучше разрешить только для конкретных папок. Повысит безопасность.
Опция -Indexes запрещает показывать содержимое каталогов, если в них нет индексного файла. На виртуальном хостинге обычно включена по умолчанию. Изменив минус на плюс +Indexes можете наоборот разрешить просмотр содержимого каталога (или каталогов).
Опция -Includes запрещает SSI. Если не знаете, что это — запрещайте (Можно поЯндексировать(!) по запросу Server Side Include если хотите узнать об этом побольше). Можно использовать опцию IncludesNOEXEC, которая разрешит использовать SSI без запуска скриптов.
Опция +FollowSymLinks позволяет использовать символические ссылки на файлы или каталоги, не находящиеся в пределах корня вашего сайта.

ПримечаниеВы можете использовать htaccess с разными настройками для разных каталогов. В корне сайта вы можете объявить -Indexes, а в избранных каталогах создать ещё один файл .htaccess и в нем объявить +Indexes. Помните, что действие опций htaccess распространяет сверху вниз по дереву каталогов до самой глубокой вложенности, пока не будут отменены другим htaccess.

Необязательно полностью перечислять все опции в дочерних .htaccess если они не изменяются. Достаточно указать (переназначить) только те опции и директивы, которые изменяются. Остальные опции также унаследуются от родителя.


ПримерСкажем, у вас есть вот такой путь /site/folder_one/subfolder/other/
В файле /site/.htaccess вы указываете:
Options  -Indexes
Allow from all

В файле /site/folder_one/.htaccess указываете:
Deny from all

В файле /site/folder_one/subfolder/.htaccess указываете:
Options  +Indexes
Allow from all

Получиться вот что:
В папке site будут показываться файлы любого содержания, если только к ним напрямую обратиться. Или индексный файл, если не явного обращения к одному из файлов. В случае отсутствия индексного файла получена 403 ошибка.
К папке folder_one доступ закрыт. Даже если знать имя файла и набрать его в адресной строке в ответ сервер вернет ошибку 403.
Папка subfolder разрешена для обращений по прямому адресу или же в случае отсутствия индексного файла покажет содержимое каталога. Эти же права распространяться и на папку other.
Если убрать файл ,htaccess из папки folder_one, то она унаследует права от родительской site.

2. Немного SEO (куда же без него)
<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteBase /
	RewriteCond %{HTTP_HOST} ^black-web
	RewriteRule (.*) http://www.black-web.ru/$1 [R=301,L]
	RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
	RewriteRule ^index\.php$ http://www.black-web.ru/ [R=301,L]
</IfModule>

Обязательно не забыть про условие . Не окажись у хостера данного модуля и ваш сайт станет выдавать 500-ую ошибку. Данный конкретный модуль входить в сборку Апача по-умолчанию. Ну а вдруг… Хостеры и их админы бывают всякие.

В данной части пользы больше для SEO. Модуль rewrite как следует из его названия занимается перенаправлениями (привет Кэпу).

В этой части файла мы указали две склейки: мы склеили ваш_сайт и www.ваш_сайт Даже если пользователь наберет ваш сайт без WWW его перебросить 301 редериктом на www.ваш_сайт.
А также мы избавились /index.php в строке запроса. Если пользователь наберет www.ваш_сайт/index.php его перебросит (снова 301 редериктом) на www.ваш_сайт.
Теперь поисковики не будут путаться между www и не будут дублировать главную страницу в результатах индексирования вашего сайта. Гуглим СЕО склейки домена, если не понимаете зачем это нужно.

3. Кто в папке главный?

Если у вас папке есть файлы index.html и index.php (не знаю, зачем и кому такое было нужно, но не раз видел такое) то как указать серверу кто их них более индексный?

DirectoryIndex index.php

А ещё можно там указать скажем roosso.php и тогда набрав в строке запроса адрес сайт.бла/бла/бла/ вы увидете не index, а roosso

4. Ещё настройки…

<IfModule mod_setenvif.c>
	SetEnv TZ Europe/Moscow
</IfModule>
ServerSignature Off
AddDefaultCharset UTF-8

Первая строчка устанавливает часовой пояс. Например в Apache 2.22.22 был баг связанный с этой опцией. Функции времени в php не работали, пока не установишь часовой пояс.

Вторая строка это подпись сервера. Вы их не раз видели на всяких системных страницах типа 500ой ошибки или 403ей. Обычно там какая-нибудь техническая информация и почта вебмастера. Я предпочитаю даже в таких мелочах скрывать данные о софте на сервере. Коллеги параноики меня поддержат.

Угадайте, что делает третья строка?

5. Когда нет доступа к php.ini

С помощью .htaccess мы также можем управлять рядом настроек PHP. На виртуальном хостинге, как правило, нет возможности изменять настройки php.ini. Чаще всего этого и не требуется. Но все же есть ряд опций контроль над которыми может нам быть полезен. Например, увеличить лимит на загрузку файлов, или лимит передачи данным методом POST.

<ifModule mod_php.c>
  php_value	upload_max_filesize	32M
  php_value	post_max_size		10M
  php_value	default_charset utf-8
  php_value	max_execution_time 200
</ifModule>

Первая строчка разрешить загружать файлы размером до 32 Мегабайт. По умолчанию в php обычно это значение 8 или 16 мегабайт.
Второй строкой разрешаем постинг объемом до 10 мегабайт. По умолчанию это значение обычно 2 Мегабайта.
Третья строка устанавливает кодировку по используемую вашими скриптами. По своей сути она дублирует строку: «AddDefaultCharset UTF-8». Но я чаще прибегаю к установке кодировки именно через php.
Четвертой строкой изменяем лимит времени выделенный на выполнение скрипта. По умолчанию он обычно равен 30 секундам. Но иногда для выполнения каких нибудь сложных обработок требуется больше времени.

6. Типы файлов. Ловкость рук и ни какого мошенничества.

В моей практике случалось пару раз, что после какого либо обновления провайдером софта, слетали типы файлов. Хотя такое редко. За 10 лет, всего два случая. Но иногда мне нужно было заставить html работать как php. А иногда требуется научить апач различать типы файлов, которые ему неизвестно. (Как оказалось Апачу вообще мало что известно из редких типов файлов.) В такой ситуации нас спасет следующий код:

AddHandler application/x-httpd-php .html
AddHandler cgi-script .pl .py .jsp .asp .htm .shtml .sh .cgi
AddType application/x-javascript .js
AddType text/css .css
AddType text/xml .xml
AddType application/octet-stream .doc .mov .avi .pdf .xls 
# ForceType application/x-httpd-php

Первая строчка позволит нашим php файлам иметь расширение html, но выполняться как php. Полезно бывает во многих случаях. А в старые добрые когда поисковики индексировали ЧПУ лучше, такая строчка всегда приходила на выручку.
Мы можем переназначить, добавить или подменить любые типы файлов под удобные нам разрешения.

Интересный трюкКстати, вы можете легко написать к примеру вот такую строку:
AddHandler application/x-httpd-php .i

Потом переименовать все ваши файлы, изменив расширение на .i (не забыв конечно про ссылки) и адреса файлов у вас на сайте будут не сайт.мой/index.php?uri а сайт.мой/index.i?uri

Например я пишу

AddHandler application/x-httpd-php .roosso

и создаю в корне своего сайта файл alex.roosso внутри обычный php код. Это вроде как страница обо мне любимом. И в адресной строке она будет выглядеть как www.black-web.ru/alex.roosso (ссылка рабочая, можете посмотреть что это так).
Второй строкой указано, какие расширения файлов должны выполняться как cgi скрипты.

Третья, четвертая и пятая строки, на всякий случай уточняют мим-тип файлов с разрешением css, js, xml. Не путайте с присвоением заголовка в ответе сервера на запрос, как это сделано в первых двух строках.

Шестая строчка это участка, нужна если на вашем сайте есть скачиваемый для пользователей контент. Если добавить эту строку, то при обращении к данным файлам им будет предлагаться скачать их на компьютер, а не как это сейчас в современным браузерах куча плагинов, которые даже word открывают в браузере.

Седьмую строку я закомментировал. Это строчка в принудительно-добровольном порядке, будет все файлы с вашего сервера запустить как php. Её лучше использовать лишь в отдельных папках, при необходимости.

7. Знают взрослые и дети, что архивы меньше весят…

Полезно, когда ваши страницы загружаются быстрее. Поэтому люди и придумали архивировать файлы. А потом они ещё подумали и решили, что архивировать можно и страницы на сайтах и картинки. Причем делать это незаметно для пользователя, но существенно снижать трафик и ускорять загрузку страниц. Волшебные слова прозвучали, теперь обсудим, как это можно сделать.

У Апача есть два модуля сжатия. Оба не являются модулями по умолчанию, поэтому необязательно могут присутствовать у вашего провайдера. Но как показала практика у 99% провайдеров один из них стоит. Наиболее распространен mod_deflate. Чтобы его с помощью сжимать весь контент на вашем сайте добавьте в .htaccess следующие строки:

<ifModule mod_deflate.c>
	AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

Как видите мы должны перечислить mime type файлов, которые следует подвергать сжатию. Сюда можно добавить и видео и картинки, но толку это даст мало. Потому что jpeg или gif уже сами по себе являются сжатыми форматами. Также как avi или flv. Вы фактически нечего не выиграете указав их.

Второй менее популярный модуль это mod_gzip, Чтобы включить сжатие с его помощью добавьте вот такие строчки:

<IfModule mod_gzip.c>
	mod_gzip_on         Yes
	mod_gzip_dechunk    Yes
	mod_gzip_item_include file		\.(html?|txt|css|js|php|pl)$
	mod_gzip_item_include mime		^text\.*
	mod_gzip_item_include mime		^application/x-javascript.*
	mod_gzip_item_exclude mime		^image\.*
	mod_gzip_item_exclude rspheader	^Content-Encoding:.*gzip.*
</IfModule>

Данный модуль умеет работать с масками, что несомненно большой плюс. Да и синтаксис у него куда более гибкий чем у предыдущего. Но используют его реже. А по сжатию я даже не берусь судить, который из модулей лучше. Я сильной разницы не заметил при тестах.

8. А ещё быстрее можно?

Можно. Если применить кеширование страниц. У кеширования есть и плюсы и минусы, поэтому подходить к этому вопросу надо подготовившись. Для динамически обновляющегося сайт каждый 2-3 минуты, например популярного форума, нужно учесть, что пользователь должен видеть актуальную информацию. Но у любого сайт есть контент, который более или менее статичен. Например те же картинки, или файлы стилей. Поэтому нам потребуется по разному использовать кеширование различного содержимого на сайте. В html разметки мы всегда можем использовать meta теги. И через php мы может устанавливать заголовки ответа сервера. Остается вопрос, как быть с css, js, image и т.д. и т.п.

Помочь нам в этом могут два модуля: mod_headers и mod_expires которые могут установить заголовки в ответ сервера и подсказать вашему браузеру, что и как нужно кешировать. Один из модулей обычно стоит у провайдера, но как и в случае с любым модулем, который не входит в стандартную сборку Апача, 100% гарантии никто вам не даст. Поэтому снова во избежание 500й ошибки указывает условия для каждого из модулей.

<ifModule mod_headers.c>
	#кэшировать html и htm файлы на один день
	<FilesMatch "\.(html|htm)$">
		Header set Cache-Control "max-age=43200"
	</FilesMatch>
	#кэшировать css, javascript и текстовые файлы на одну неделю
	<FilesMatch "\.(js|css|txt)$">
		Header set Cache-Control "max-age=604800"
	</FilesMatch>
	#кэшировать флэш и изображения на месяц
	<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
		Header set Cache-Control "max-age=2592000"
	</FilesMatch>
	#отключить кэширование
	<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
		Header unset Cache-Control
	</FilesMatch>
</IfModule>

Вот такой синтаксис у mod_headers. Думаю по комментариям ясно что к чему.
В данной секции я отключил кеширование php файлов. Хотя по моему мнению небольшой временной интервал кеширования им не повредит. 5-30 секунд, это интервал времени, за который мало что меняется. А многие пользователи любят пользоваться клавишей back (вернуться назад). Чтобы не загружать им страницу второй раз, а подхватить её из кеша, разумный интервал кеширования все же уместен.

Во второй секции где идут условия для mod_expires я именно так и делаю — для php ставлю небольшой интервал кеширования.

<ifModule mod_expires.c>
	ExpiresActive On
	#по умолчанию кеш в 5 секунд
	ExpiresDefault "access plus 5 seconds"
	#кэшировать флэш и изображения на месяц
	ExpiresByType image/x-icon "access plus 2592000 seconds"
	ExpiresByType image/jpeg "access plus 2592000 seconds"
	ExpiresByType image/png "access plus 2592000 seconds"
	ExpiresByType image/gif "access plus 2592000 seconds"
	ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
	#кэшировать css, javascript и текстовые файлы на одну неделю
	ExpiresByType text/css "access plus 604800 seconds"
	ExpiresByType text/javascript "access plus 604800 seconds"
	ExpiresByType application/javascript "access plus 604800 seconds"
	ExpiresByType application/x-javascript "access plus 604800 seconds"
	#кэшировать html и htm файлы на один день
	ExpiresByType text/html "access plus 43200 seconds"
	#кэшировать xml файлы на десять минут
	ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>

9. Правила вежливого тона…

В процессе модернизации своего сайта, мы часто оставляем хвосты ввиде ссылок, которые ведут на страницы, которые мы удалили. Иногда такие ссылки идут с других сайтов или из поисковых систем. Чтобы не терять пользователей вежливым тоном считается иметь собственные страницы для различного типа ошибок. Включая даже ошибки сервера. Например стандартное сообщение о 500й ошибки очень скучное и мрачное, и вряд ли вызовет у пользователя желание посетить вашу страницу ещё раз. Но в htaccess есть приемы, которые могут сделать даже эту страницу приветливей.

# Bad Rquest
ErrorDocument 400 /400.html
# Authorization Required
ErrorDocument 401 /401.html
# Forbidden
ErrorDocument 403 /403.html
# Not found
ErrorDocument 404 /404.html
# Method Not Allowed
ErrorDocument 405 /405.html
# Request Timed Out
ErrorDocument 408 /408.html
# Request URI Too Long
ErrorDocument 414 /414.html
# Internal Server Error
ErrorDocument 500 /500.html
# Not Implemented
ErrorDocument 501 /501.html
# Bad Gateway 
ErrorDocument 502 /502.html
# Service Unavailable 
ErrorDocument 503 /503.html
# Gateway Timeout
ErrorDocument 504 /504.html

Для 400-х ошибок можно использовать и динамические страницы на php. А вот для 500 лучше сделать на html и js. Это часть ошибок обычно связана с ошибками сервера (в большинстве случаев) и php или cgi как правило в такой ситуации не работают.

Если вам лень делать столько страниц устанавливайте страницей ошибок главную страницу своего сайта или карту сайта.

Все это вы делаете исключительно для людей. Поисковым роботам плевать на то есть у вас страницы ошибок или нет. Они видят ответ сервера с кодом ошибки и блокируют вашу страницу в поиск. Так что имейте ввиду, это не панацея. Это лишь вежливость к вашей аудитории и имидж вашего сайта.

10. Подведем итог

Знатоки понимают, что в этой статье описано далеко не все. Я коснулся здесь лишь поверхности «айсберга». На самом деле возможности .htaccess куда много обширней, чем описано в статье. Но я и не преследовал целью перевести манаул по htaccess на русский язык. Всего чего я хотел это создать небольшой костяк файла .htaccess для тех, кто только приступил к изучению данного вопроса, чтобы сэкономить их время на поисках информации по сети.

В результате всех манипуляций у нас должен был получить файл следующего содержания:

Options All -ExecCGI -Indexes -Includes +FollowSymLinks

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^black-web
    RewriteRule (.*) http://www.black-web.ru/$1 [R=301,L]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
    RewriteRule ^index\.php$ http://www.black-web.ru/ [R=301,L]
</IfModule>

DirectoryIndex index.php

<IfModule mod_setenvif.c>
	SetEnv TZ Europe/Moscow
</IfModule>
ServerSignature Off
#AddDefaultCharset UTF-8
<ifModule mod_php.c>
	php_value	upload_max_filesize	32M
	php_value	post_max_size		10M
	php_value	default_charset utf-8
	php_value	max_execution_time 200
</ifModule>
AddHandler application/x-httpd-php .html
AddHandler cgi-script .pl .py .jsp .asp .htm .shtml .sh .cgi
AddType application/x-javascript .js
AddType text/css .css
AddType text/xml .xml
AddType application/octet-stream .doc .mov .avi .pdf .xls 
# ForceType application/x-httpd-php

<ifModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

<IfModule mod_gzip.c>
    mod_gzip_on         Yes
    mod_gzip_dechunk    Yes
    mod_gzip_item_include file		\.(html?|txt|css|js|php|pl)$
    mod_gzip_item_include mime		^text\.*
    mod_gzip_item_include mime		^application/x-javascript.*
    mod_gzip_item_exclude mime		^image\.*
    mod_gzip_item_exclude rspheader	^Content-Encoding:.*gzip.*
</IfModule>

<ifModule mod_headers.c>
    #кэшировать html и htm файлы на один день
    <FilesMatch "\.(html|htm)$">
        Header set Cache-Control "max-age=43200"
    </FilesMatch>
    #кэшировать css, javascript и текстовые файлы на одну неделю
    <FilesMatch "\.(js|css|txt)$">
        Header set Cache-Control "max-age=604800"
    </FilesMatch>
    #кэшировать флэш и изображения на месяц
    <FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
    #отключить кэширование
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
        Header unset Cache-Control
    </FilesMatch>
</IfModule>

<ifModule mod_expires.c>
    ExpiresActive On
    #по умолчанию кеш в 5 секунд
    ExpiresDefault "access plus 5 seconds"
    #кэшировать флэш и изображения на месяц
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
    #кэшировать css, javascript и текстовые файлы на одну неделю
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 604800 seconds"
    ExpiresByType application/javascript "access plus 604800 seconds"
    ExpiresByType application/x-javascript "access plus 604800 seconds"
    #кэшировать html и htm файлы на один день
    ExpiresByType text/html "access plus 43200 seconds"
    #кэшировать xml файлы на десять минут
    ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>

# Bad Rquest
ErrorDocument 400 /400.html
# Authorization Required
ErrorDocument 401 /401.html
# Forbidden
ErrorDocument 403 /403.html
# Not found
ErrorDocument 404 /404.html
# Method Not Allowed
ErrorDocument 405 /405.html
# Request Timed Out
ErrorDocument 408 /408.html
# Request URI Too Long
ErrorDocument 414 /414.html
# Internal Server Error
ErrorDocument 500 /500.html
# Not Implemented
ErrorDocument 501 /501.html
# Bad Gateway 
ErrorDocument 502 /502.html
# Service Unavailable 
ErrorDocument 503 /503.html
# Gateway Timeout
ErrorDocument 504 /504.html

11. Послесловие.

Я старался не спешить в написании статьи и на это ушли почти сутки. Но все же где то я мог допустить ошибки в орфографии или пунктуации. Прошу не казнить, а миловать. А лучше писать в личку, чтобы я поправил ошибки.

И напоследок для любителей экспериментов несколько строк .htaccess. Сужу по своему опыту — на практике знания усваиваются лучше чем в теории.

Разные интересные примеры
# SECURE ____________________
<IfModule mod_ssl.c>
	SSLOptions +StrictRequire
	SSLRequireSSL
	SSLRequire %{HTTP_HOST} eq "black-web.ru"
</IfModule>
<IfModule mod_rewrite.c>
	RewriteCond %{HTTPS} !on
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>

# HOTLINKING ________________
<IfModule mod_rewrite.c>
	RewriteCond %{HTTP_REFERER} !^$
	RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9]  \.)?black-web\.ru [NC]
	RewriteRule \.(gif|jpe?g|png)$ - [F,NC,L]
</IfModule>

# REDIRICT __________________
Redirect 301 /index.html /index.php
<IfModule mod_rewrite.c>
	RewriteRule ^news/([^/\.]+)/?$ news.php?news=$1 [L]
	RewriteRule ^(.*\.((js)|(css)))$ plugin/GzipFile.php?file=$1
	RewriteRule \.css$ plugin/GzipFile.php?file=$1
	RewriteRule \.js$ plugin/GzipFile.php?file=$1
</IfModule>
RedirectMatch 301 /blog(.*) http://www.black-web.ru/$1

P.S.

… Для тех у кого всё получилось, идём на www.webpagetest.org мерять красоту до и после.
Andrey_Zentavr
Кому надо берите полностью готовый .htaccess здесь
Данный файл показал самую высокую производительность на тестах.
Также там куча всего закомментировано о чем я не упомянул в статье и что может пригодиться в тех или иных случаях.

Файл htaccess. Начинаем знакомство

Файл htaccess

От автора: думаю, практически каждый веб-мастер в своей работе сталкивался с файлом htaccess — файлом дополнительной конфигурации веб-сервера Apache. Рано или поздно возникает задача, которую проще решить посредством именно данного файла, а иногда и вовсе невозможно решить без его использования. Файл htaccess — это чрезвычайно полезный инструмент, который, однозначно, должен присутствовать в арсенале веб-мастера.

Однако, не смотря на значимость и полезность данного файла, многие веб-мастера практически не умеют работать с ним. Причиной тому является практически полное отсутствие обучающих материалов по данной теме или их однобокость. Давайте попробуем восполнить этот пробел серией уроков, посвященных работе с файлом htaccess.

скачать исходникискачать урок

Файл htaccess — это файл дополнительной конфигурации веб-сервера Apache. htaccess позволяет задавать большое количество дополнительных параметров для работы веб-сервера у отдельных пользователей, не предоставляя при этом доступа к конфигурационному файлу сервера, т.е. не влияя на работу всего сервера целиком.

скачать урок

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Файл htaccess может быть размещен в любом каталоге Вашего сайта. Директивы этого файла действует на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess). Именно в этом заключается одно из преимуществ данного файла — мы легко можем настраивать каждый конкретный каталог. При этом сервер подхватывает новые настройки «на лету», т.е. после написания директив в файле htaccess нам не нужно производить рестарт сервера, и в этом заключается второе преимущество работы с файлом дополнительной конфигурации.

В уроках мы, конечно же, не будем рассматривать работу с каждой из директив, их слишком много. Но мы рассмотрим наиболее полезные, на мой взгляд, директивы, а также директивы, которые могут пригодиться в работе веб-мастера. Со списком же всех директив Вы можете ознакомиться в документации официального сайта

Итак, смотрите урок и применяйте на практике :)

Здесь же приведем с комментариями использованные в уроке директивы:

# установка кодировки сервера #AddDefaultCharset utf-8 # запрет листинга каталогов #Options -Indexes # разрешение листинга каталогов #Options +Indexes # открытие файлов без указания расширения… может привести к неожиданному результату #Options +MultiViews # переопределение индексного файла #DirectoryIndex file_php.php #DirectoryIndex file.jpg # стилизация листинга #IndexOptions FancyIndexing #IndexOptions FancyIndexing ScanHTMLTitles # исключение из листинга всех файлов, определенных файлов и определенных расширений #IndexIgnore *.rar *.zip *.txt 403.jpg #IndexIgnore *

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

# установка кодировки сервера

#AddDefaultCharset utf-8

 

# запрет листинга каталогов

#Options -Indexes

# разрешение листинга каталогов

#Options +Indexes

 

# открытие файлов без указания расширения… может привести к неожиданному результату

#Options +MultiViews

 

# переопределение индексного файла

#DirectoryIndex file_php.php

#DirectoryIndex file.jpg

 

# стилизация листинга

#IndexOptions FancyIndexing

#IndexOptions FancyIndexing ScanHTMLTitles

 

# исключение из листинга всех файлов, определенных файлов и определенных расширений

#IndexIgnore *.rar *.zip *.txt 403.jpg

#IndexIgnore *

:)

Хотите узнать, что необходимо для создания сайта?

Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!

Смотреть

Все про файл .htaccess | УФАКОМП.РФ

Инструкции файла .htaccess

Файл .htaccess позволяет изменять многие настройки вашего сайта — как настройки веб-сервера Apache, так и опции PHP. Директивы, указанные в файле .htaccess, распространяются на ту директорию, в которой он находится, а также на все вложенные директории (за одним исключением, которое будет рассмотрено ниже), в том числе и на поддомены (поскольку директории поддоменов являются поддиректориями основного сайта).Как правило, файл .htaccess создается в корневой директории сайта и иногда в директориях, которые требуют специфического поведения веб-сервера (запрет отображение списка файлов, включение SSI, авторизация и прочее).

Вы можете самостоятельно создавать файл .htaccess с помощью FTP-клиента и работать с ним как с любыми другими файлами Вашего сайта.

Почему только что созданный файл .htaccess не отображается в списке файлов?

Некоторые FTP-клиенты считают файлы, начинающиеся с точки, скрытыми и не отображают их по умолчанию. В таких случаях для того, чтобы видеть файл .htaccess, необходимо в настройках FTP-клиента включить настройку «Отображать скрытые файлы».

Почему файл .htaccess, размещенный в корне сайта, не работает во вложенных директориях?

Это связано с оптимизацией обработки статических файлов.

Сайты обычно содержат большое количество статических файлов. Это файлы, которые не требуют запуска скриптов для их отображения: картинки, музыка, видео, css, javascript, простые html-страницы. Для ускорения работы сайтов они обрабатываются, минуя основной веб-сервер и без анализа файлов .htaccess.

Иногда возникает необходимость запретить в конкретной директории оптимизацию обработки статических файлов. Например, если это картинки, на которые нужно накладывать водяной знак, перенаправляя запросы к ним на специальный скрипт.

Чтобы файлы в какой-либо директории всегда обрабатывались без оптимизации, необходимо в этой директории создать файл .htaccess. Этот файл может не содержать никаких директив, достаточно лишь его существования.

Важно не забывать, что отключение оптимизации может повлиять на скорость работы Вашего сайта и использование ресурсов тарифного плана.

Почему поддомен показывает ошибку?

Для поддомена наследуются настройки .htaccess домена. Если в настройках .htaccess домена используются правила mod_rewrite, они могут приводить к некорректной работе поддомена. Чтобы правила mod_rewrite домена не действовали на поддомен, необходимо добавить в файл .htaccess поддомена следующую строчку:

RewriteEngine off

По этой же причине не рекомендуется устанавливать приложения (Joomla, WordPress и т. п.) одновременно на сайт и на его поддомены. Это может привести к некорректной работе приложения, размещенного на поддомене.

Почему при открытии директории сайта в браузере показывается 403 Forbidden?

При открытии директории без указания конкретного файла веб-сервер ищет файлы index.htm, index.html, index.php для отображения (индексные файлы). Если индексные файлы отсутствуют, сервер возвращает ошибку 403 Forbidden, так как отображение списка файлов в директории по умолчанию запрещено.

Чтобы ошибка 403 Forbidden не отображалась, либо создайте в директории индексный файл, либо добавьте в файле .htaccess опцию:

Options +Indexes

Установка индексного файла для сайта

По умолчанию индексным файлом вашего сайта веб-сервер считает файл (в порядке приоритета): index.html, index.php.

Чтобы установить в качестве индексного файла произвольный файл, следует добавить инструкцию:

DirectoryIndex имя_файла

Например, следующая инструкция предписывает веб-серверу при обращении к сайту открывать в качестве индексной страницы скрипт на языке Perl, размещенный в директории cgi-bin вашего сайта:

DirectoryIndex /cgi-bin/engine.pl

Как включить отображение ошибок PHP?

Для отображения ошибок PHP добавьте в файл .htaccess директиву:

php_value display_errors 1

Как изменить максимальный размер загружаемых файлов в PHP?

Максимальный размер загружаемых файлов указывается в .htaccess с помощью двух директив:

php_value upload_max_filesize 20M
php_value post_max_size 20M 

Вместо 20M укажите желаемый размер ограничения. Значение этих параметров не может быть больше 50M. Обратите внимание, что символ “M” (латинская M) указывается слитно со значением.

Как указать интерпретатору PHP необходимость обрабатывать не только файлы .php?

Чтобы заставить интерпретатор PHP обрабатывать файлы с произвольным расширением, нужно добавить соответствующую инструкцию в файл .htaccess, расположенный в корневой директории вашего сайта. Например, следующая инструкция укажет интерпретатору PHP на необходимость обрабатывать файлы с расширением .phtml:

AddType application/x-httpd-php .phtml

Как изменить время хранения сессий PHP

Изменение времени хранения сессий может потребоваться, например, если вы хотите, чтобы данные об авторизации пользователей на вашем сайте сохранялись дольше. По умолчанию время хранения сессий — 1440 секунд (24 минуты), cookie с идентификатором сессии — до закрытия браузера пользователем.

Для изменения времени хранения сессий PHP необходимо внести несколько изменений в .htaccess. Так как конкретные настройки могут зависеть от особенностей работы вашего сайта с посетителями, рекомендуем перед внесением изменений проконсультироваться с профессиональным разработчиком. Возможно, непосредственно для вашего сайта более эффективным окажется альтернативный механизм хранения данных, привязанных к посетителю (например, только через cookie), либо альтернативный механизм хранения сессий PHP (установленный с помощью session_set_save_handler()).

Для изменения времени хранения сессий добавьте в .htaccess следующие директивы:

# Создайте отдельную директорию для хранения сессий вашего сайта,
# например, domains/ВАШ_САЙТ/tmp. Это необходимо, чтобы PHP не удалял сессии сайта
# при очистке старых сессий других сайтов, работающих на аккаунте.
# Установите директорию хранения сессий для сайта с помощью session.save_path.
php_value session.save_path /home/ВАШ_ЛОГИН/domains/ВАШ_САЙТ/tmp
# Установите максимальное время жизни сессии в секундах.
# 604800 - 1 неделя.
php_value session.gc_maxlifetime 604800
# Установите время жизни cookie, которая сохраняет идентификатор сессии
# в браузере пользователя.
php_value session.cookie_lifetime 604800

 

Обратите внимание: если сессия открывается для каждого неавторизованного пользователя, при большом количестве посетителей и длительном времени сохранения сессий образуется большое количество файлов в папке, указанной в session.save_path. Это может вызывать замедления сайта в момент запуска механизма очистки старых сессий и увеличивать количество ресурсов, необходимых для работы сайта. В случае работы с большим количеством сессий мы рекомендуем использовать альтернативные механизмы их хранения и очистки, например:

  • Указывать вложенность директорий хранения сессий с помощью аргумента N в session.save_path. Очищать старые сессии при этом необходимо собственными скриптами. Более подробная информация об этом методе находится в описании session.save_path в документации PHP.
  • Реализовать собственный механизм хранения сессий (например, в MySQL) и установить его с помощью session_set_save_handler().

Как включить SSI

Директивы SSI (Server Side Includes) по умолчанию обрабатываются в файлах с расширением .shtml (например, index.shtml). Чтобы SSI обрабатывались и в других файлах, необходимо в файле .htaccess указать следующие директивы:

AddType text/html .html .ssi
AddOutputFilter INCLUDES .html .ssi

Вместо “.ssi .html” укажите расширения файлов, в которых должны обрабатываться директивы SSI.

Обратите внимание: мы не рекомендуем использовать в одном и том же файле PHP и SSI одновременно.

Как настроить выполнение скриптов CGI?

Для выполнения скриптов CGI в какой-либо папке необходимо настроить веб-сервер соответствующим образом с помощью файла .htaccess.

  1. В папке, в которой должны выполняться скрипты CGI, создайте файл .htaccess вида: Options +ExecCGI
    AddHandler cgi-script .cgi .pl
    Вместо “.cgi .pl” укажите список расширений, которые должны обрабатываться как скрипты.
  2. Загрузите скрипты в папку.
  3. С помощью Вашего файлового менеджера установите файлам скриптов права на выполнение (755).

Как изменить ограничение на использование оперативной памяти в PHP?

Для изменения ограничения на оперативную память используйте следующую директиву в .htaccess:

php_value memory_limit 128M

Вместо 128M укажите желаемый размер ограничения. Обратите внимание, что символ “M” (латинская M) указывается слитно со значением.

Как сделать так, чтобы сайт всегда открывался по основному имени?

Если у вашего сайта несколько имен, но вы хотите, чтобы пользователи всегда видели в адресной строке основное имя сайта, добавьте в файл .htaccess в корне вашего сайта следующие строки:

RewriteEngine on
 RewriteCond %{HTTP_HOST} ^www.site.com [NC] 
 RewriteRule ^(.*) http://site.com/$1 [L,R=permanent]  

Замените example.com на основное имя вашего сайта. Теперь при обращении к сайту пользователи будут автоматически перенаправлены на его основное имя.

Какие еще настройки PHP можно задавать в .htaccess?

В документации на сайте разработчика указан полный список директив PHP. В файле .htaccess можно изменять директивы, значение графы Changeable для которых соответствует PHP_INI_PERDIR или PHP_INI_ALL.

Похожие записи

Каким должен быть правильный файл конфигураций htaccess

Во время настройки сервера важно создать правильный файл конфигураций htaccess. Для каждого сайта этот файл будет выглядеть по-своему, но в целом есть примеры документа htaccess, которые подходят для множества веб-ресурсов. Все зависит от директив этого файла, а также от их последовательности. Именно о них и пойдет речь в данной статье – вы узнаете рабочие примеры файла htaccess, а также о том, как они помогут вашему сайту стать лучше.

Почему настройка файла htaccess так важна для сайта

Файл htaccess – это не просто стандартный конфигурационный документ. По умолчанию, на сервере может и не быть файла htaccess. Он нужен не для основных, а для настройки дополнительных параметров хостов Apache. Кроме того, он хорошо подходит для изменения конфигураций отдельных страниц, то есть каталогов на сервере.

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

Обратите внимание на расположение файла конфигураций. Если поместить этот файл в корневом каталоге сервера, то он будет считаться основным.

Функции этого файла распространяются на все остальные каталоги. Но если в какой-либо папке имеется свой файл htaccess, то в этом каталоге будут действовать его директивы, а не опции основного документа. Действие этого файла htaccess будет распространяться и на внутренние директории.

Примеры настроек файла htaccess

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

С другой стороны, вам следует защитить картинки и прочие статические файлы сайта от хотлинков. Файл htaccess позволяет создавать различные переадресации при помощи модуля mod_rewrite. При помощи этого же модуля вы сможете заблокировать хотлинки. Это когда вместо того, чтобы загружать файл к себе на сервер, другие вебмастера оставляют ссылки на файл, размещенный у вас на сайте. В результате, нагрузка на сайт увеличивается, и скорость его загрузки падает. Примеры блокировки хотлинков вы сможете найти в Интернете и на форумах.

В списке самых первых директив стоит указать функциональные строки, которые будут определять канонические ссылки для сайта. То есть вам нужно прописать директивы, которые будут склеивать зеркала. Примеры таких зеркал – это домен с WWW и без, а также главная страница с index.php и без указания этого файла. Документ конфигураций htaccess эффективно борется с подобными двоякими проблемами. Вам необходимо будет наполнить файл директивами RewriteEngine, RewriteCond и RewriteRule, которые нужны для активации переадресации.

Если планируете склеить зеркала или сменить домен, то вам понадобятся редиректы. Их можно записывать как отдельные директивы, либо указывать в квадратных скобках после RewriteRule. Редиректы – это правила переадресации, которые нужны для того, чтобы объяснить ваш переезд поисковым роботам. Если планируете склеить зеркало с WWW и без, то указывайте редирект 301. Он нужен для тех случаев, когда ссылки переезжают навсегда. А если планируете активировать временное преобразование URL на сайте, к примеру, чтобы продемонстрировать пользователям новый пост, то указывайте 302 редирект, который не передает вес ссылки, но и не удаляет старые страницы с поисковой выдачи.

Примеры использования файла htaccess также включают применение этого документа для коррекции ссылок. Иногда случается так, что в ссылках появляются двойные слеши. На индексацию ресурса это влияет не сильно, но иногда свой эффект может оказать. Вот пример того, как можно убрать удвоение слешей из ссылок:

  1. RewriteCond %{THE_REQUEST} // – условие переадресации, которое говорит о наличии двух слешей.
  2. RewriteRule .* /$0 [R=301,L] – правило переадресации ссылки на URL с одним слешем. В квадратных скобках указан редирект 301, чтобы пояснить поисковикам, что это перманентный переезд.

Подобным образом вам нужно будет убрать слеши из ссылок, которые ведут к статичным файлам. И чтобы не путать пользователей и поисковые системы, слеш нужно будет добавить в конце ссылки, которая не ведет к статичному файлу, но и не заканчивается символом “/”.

Еще одна важная опция, которая не касается ссылок, но причастна к определению протокола доступа к сайту – это перенаправление https на http. Дело в том, что не все сервера поддерживают SSL-сертификаты. И хоть такое подключение считается более безопасным, в случае отсутствия поддержки https на сайте, он будет загружаться неправильно. У некоторых полностью пропадает дизайн, а у других смещаются строчки с текстом и меняется шрифт. Пользователи не поймут, если увидят ваш сайт в таком виде. Потому перенаправьте ссылки. Вот пример такого правила:

  1. RewriteCond %{HTTPS} on – условие перенаправление https-протоколов.
  2. RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} – правило перенаправления на указанное доменное имя.

В качестве оптимизации ресурс через файл htaccess можете активировать кэширование. Особенность настройки кэша браузера через этот файл в том, что вам не придется активировать одинаковое кэширование для всех страниц и объектов на сайте. Вы сможете настроить для каждого типа файла и документа свой индивидуальный период кэширования. Заключать директиву кэширования необходимо между тегами . Также сразу после открытия этих тег вам нужно указать директиву активации модуля mod_expires: ExpiresActive on. А чтобы указать индивидуальный период, нужно прописать тип файла, а также его формат. Вот как будет выглядеть активация кэша для jpeg-изображений на 3 дня: ExpiresByType image/jpeg “access plus 3 day”. Но лучше для подобных статических файлов указывать более длительный период (от месяца до года).

Файл htaccess поможет вам привлечь больше трафика на сайт, а точнее уменьшить его потери. Как известно, чем больше веб-ресурс, тем больше в Интернете неправильных его ссылок, которые ведут на страницы с ошибками. При помощи файла htaccess вы сможете настроить собственные страницы ошибок. В них вы можете написать все, что угодно, но лучше сделать так, чтобы после их посещения пользователи захотели остаться у вас на сайте. К примеру, можете активировать на таких страницах переадресацию на главную. Либо добавить на них строку поиска по материалам сайта. Чтобы указать путь к новым страницам с ошибками, используйте директиву ErrorDocument.

Возможно, вам также понадобится функция htaccess для указания кодировок, с которыми работает сервер или текущий каталог. Дело в том, что некоторые браузеры могут открыть ваш сайт в неправильной кодировке. В результате, они получат вместо понятного текста набор несвязных символов и букв. Если вы укажите кодировку по умолчанию при помощи директивы AddDefaultCharset, такого никогда не случится. А помимо этого, вы можете создать отдельные каталоги, и указать в них другие кодировки в файле htaccess. Это нужно для того, чтобы сделать версию сайта на другом языке, который предполагает использование иной кодировки.

Стоит также отметить возможность htaccess блокировать доступ к файлам и папкам. Не все используют подобные опции, но бывает всякое, и возможно, вам понадобится эта функция. Для этого используйте директивы Deny и Allow. А чтобы заблокировать доступ к определенным файлам, указывайте их название в тегах . При помощи директив Deny from и Allow from вы сможете создавать исключения для указанных IP-адресов. Именно таким образом можно сформировать у себя на сайте платную подписку к некоторым разделам ресурса. Тем более, вы можете блокировать доступ не только по IP, но и создавать парольную аутентификацию как для целых каталогов, так и для отдельных файлов.

Изучайте синтаксис и директивы – и найдете еще больше полезных функций в файле htaccess!

Как создать файл .htaccess и для чего его можно использовать? — Справочный центр Hostway

  • База знаний
    • Домашняя страница справочного центра
    • Начало работы
    • Регистрация домена и DNS
    • Электронная почта и сотрудничество
    • Хостинг веб-сайтов
    • Хостинг VPS
    • Управляемый выделенный и облачный хостинг
    • Сервисные уведомления
  • Продукты
    • Управляемый выделенный хостинг
    • Управляемый облачный хостинг
      • Публичное облако AWS
      • Общедоступное облако Azure
      • Виртуальное частное облако
      • Частное облако VMWare
      • Гибридное облако
    • Управляемая инфраструктура
      • Управляемые балансировщики нагрузки
      • Управляемый SSL и шифрование
      • Управляемый межсетевой экран
      • Управляемый мониторинг
      • Управляемое хранилище
      • Управляемое резервное копирование
      • Соответствие
      • (PCI и HIPAA)
        • Соответствие HIPAA
        • Соответствие PCI
    • управляемых баз данных
      • Microsoft SQL Server
    • Управляемый Magento
    • Хостинг веб-сайтов
    • Электронная почта и сотрудничество
      • Управляемый Office 365
      • Размещенный Microsoft Exchange
      • Хостинг Open-Xchange
    • Регистрация домена
  • Управляемые услуги
    • Управляемые уровни обслуживания
    • Оценка и перенос в облако
  • Решения
    • Миграции в облако
    • Электронная торговля
    • Здравоохранение
    • Критически важных приложений SaaS
    • Управляемые решения безопасности
  • ресурса
    • Ресурсный центр
      • Примеры использования пользователей
      • Инфографика
      • Официальные документы
      • Брошюры
      • Вебинары
      • Видео
    • Пресс-релизы
    • Новости
    • События
    • Блог
  • Партнеры
    • Партнерские программы
    • Реферальные партнеры и реселлеры
    • Партнеры по здравоохранению
    • Глобальные партнеры
  • Поддержка
    • Центр поддержки клиентов
    • Войти
    • Сервисные уведомления
  • О компании
    • Наша история
    • Наш залог
    • Управленческая команда
    • Инфраструктура
      • Сетевые службы
      • Дата-центры
    • Экспертиза Microsoft
    • Истории клиентов
    • Карьера
    • Legal
      • SLA
.

Создание файла .htaccess — 2 ответа.

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

  1. Авторизоваться зарегистрироваться
  2. текущее сообщество

.

Создание и редактирование файла .htaccess

  • Клиент Авторизоваться
  • открыто Билет
  • Онлайн-чат
  • 888-404-1279
  • Хостинг общий Бизнес Реселлер White Label
  • VPS Управляемый Linux Удалось Windows
    Неуправляемый Linux неуправляемых Windows
  • Облако
  • Преданный
  • Услуги SSL
  • Компания О нас Награды Дата-центров Свяжитесь с нами
  • Служба поддержки Вход для клиентов Открыть билет Позвонить Служба поддержки
  • Вход для клиентов
перейти к содержанию Руководства Hostwinds

Поиск в базе знаний проводников Hostwinds

Поиск Главное руководство Hostwinds ›.

Создание файла .htaccess? — Переполнение стека

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

  1. Авторизоваться зарегистрироваться
  2. текущее сообщество

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *