Как настроить файл htaccess. Файл htaccess: применение, включение, настройка

Представляю вашему вниманию — подборку правил для.htaccess, собранную автором JP в блоге DevMoose - с моими комментариями и дополнениями.

Обсуждение — приветствуется!

При правильном использовании, конфигурационный файл web-сервера Apache — .htaccess (hypertext access) представляет собой очень мощное средство в инструментарии разработчика. По-обыкновению, основной файл располагается в корневой директории вашего web-сервера (также могут присутствовать отдельные файлы в каждой папке — для управления доступом) и может быть откорректирован с помощью любого текстового редактора. В этой статье я покажу вам 20 правил для.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.)?domainname.com/ RewriteRule .*.(gif|jpg|png)$ http://domainname.com/img/stop_stealing_bandwidth.gif

Не забудьте изменить domainname.com на ваше доменное имя и создать изображение stop_stealing_bandwidth.gif , которое будет показано вместо запрошенной картинки.

2. Блокируем все запросы от нежелательных User Agents

Это правило позволяет заблокировать нежелательные User Agent, которые могут быть потенциально опасными или просто перегружать сервер ненужными запросами.

#Блокируем плохих ботов и роботов SetEnvIfNoCase user-Agent ^FrontPage SetEnvIfNoCase user-Agent ^Java.* SetEnvIfNoCase user-Agent ^Microsoft.URL SetEnvIfNoCase user-Agent ^MSFrontPage SetEnvIfNoCase user-Agent ^Offline.Explorer SetEnvIfNoCase user-Agent ^ebandit SetEnvIfNoCase user-Agent ^Zeus Order Allow,Deny Allow from all Deny from env=bad_bot

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 /d/file.html http://www.domainname.com/r/file.html

Не забудьте изменить domainname.com на ваше доменное имя, а /d/file.html и /r/file.html на соответствующие директории и страницы.

5. Создаем собственные страницы ошибок

Вам надоел стандартный вид страниц ошибок? Нет проблем — с помощью следующего кода, вы легко можете создать свою страницу и показывать пользователю именно ее:

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

Не забудьте создать в корневой директории вашего сервера папку error и разместить в ней соответствующие файлы.

6. Создаем черный список IP адресов

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

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

Узнать IP адреса комментаторов можно или в логах Apache или с помощью сервисов статистики. Для WordPress, 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, вы можете настроить перенаправление со старого доменного имени на новое, добавив следующий код:

#Перенаправляем со старого домена - на новый RewriteEngine On RewriteRule ^(.*)$ http://www.domainname.com/$1

Перенаправление используется в том случае, если вы переносите свой существующий сайт на новое доменное имя. В этом случае любой пользователь, который наберет в адресной строке http://www.old domainname.com — будет перенаправлен на http://www.domainname.com

14. Усиливаем кеширование

Использование этого правила не означает прямое ускорение загрузки вашего сайта. Оно предназначено для более быстрой загрузки сайта — для уже заходившего на него посетителя , путем отправки статуса 304 для тех элементов, которые не обновлялись. Таким образом, при повторной загрузке страницы браузер посетителя не будет заново скачивать изображения, скрипты или CSS, а выведет те файлы, которые уже хранятся в его кеше. Вы можете изменить срок жизни кеша, путем корректирования его значения в годах (year), месяцах (month) или, например — секундах (seconds). В примере указан 1 год.

#Усиливаем кеширование FileETag MTime Size ExpiresActive on ExpiresDefault "access plus 1 year"

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 no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html

Обратите внимание, что включение компрессии приведет к большей нагрузке на процессор сервера.

16. Удаляем «category» из URL

#Удаляем category из URL RewriteRule ^category/(.+)$ http://www.yourdomain.com/$1

Не забудьте изменить http://www.yourdomain.com на ваше доменное имя.

17. Запрещаем просмотр содержимого папки

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

#Запрещаем просмотр содержимого папки Options All -Indexes

Update: Jack.Sun предложил альтернативное решение, имеющее такой же результат — разместить в каждой папке файл index.html. От себя добавлю, что этот метод будет работать только в том случае, если вы не изменяли страницу по-умолчанию (см. правило #11). В этим случае, необходимо размещать файлы с тем новым именем, которое было задано вами в качестве страницы по-умолчанию.

18. Перенаправляем RSS-ленту WordPress на FeedBurner

Этот код позволяет перенаправить RSS-ленту WordPress на сервис Google Feedburner.

#Перенаправляем RSS-ленту WordPress на FeedBurner RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedBurner RewriteCond %{HTTP_USER_AGENT} !FeedValidator RewriteRule ^rss.xml$ http://feeds.feedburner.com/yourfeed

19. Запрещаем комментарии от пользователей без Referrer

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

#Запрещаем комментарии от пользователей без Referrer RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .wp-comments-post\.php* RewriteCond %{HTTP_REFERER} !.*yourblog.com.* RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$

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

20. Убираем расширение файла из URL

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

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

21. Защищаем сайт

Данный код позволяет защитить сайт от scripts enjection и нежелательных модификаций _REQUEST и/или GLOBALS

#Включаем отслеживание сим-ссылок Options +FollowSymLinks #Запускаем url_rewriting RewriteEngine On #Блокируем все ссылки, содержащие RewriteCond %{QUERY_STRING} (\|%3E) #Блокируем все скрипты, которые пытаются изменить переменные PHP Globals: RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%{0,2}) #Блокируем все скрипты, которые пытаются изменить переменную _REQUEST: RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%{0,2}) #Перенаправляем все подобные на страницу с ошибкой 403 - запрещено RewriteRule ^(.*)$ index.php

В данной статье Вы узнаете о настройках файла htaccess: о редиректах и перезаписи, а также о конфигурировании веб-сервера и его защите.

Что такое.htaccess? (Hypertext Access)

Это файл-конфигуратор на уровне каталога, который загружается сервером и дает возможность существенно изменить его поведение (перенаправления, включение/отключение определенных функций). Этот файл также позволяет защитить некоторые разделы сайта.

Из-за специфики названий тип файла htaccess не всегда заметен. Чтобы его увидеть, необходимо активировать “ dot files ” или “ .files ” в вашем программном обеспечении FTP/Cpanel. Если возникают сложности, можно создать и редактировать файл как.txt (просто изменить расширение и название во время загрузки).

Всегда делайте бэкап htaccess, когда собираетесь внести какие бы то ни было изменения. Если ошибетесь, сайт высветит ошибку 500 Internal Server Error, и для последнего изменения можно будет просто поместить символ # перед кодом в файле htaccess.

  • Вы можете комментировать ссылки в htaccess с помощью # , количество символов не имеет значения; к примеру, ## или ### можно использовать для описательных комментариев, а один # - для активации/деактивации кода.
  • Используйте блокнот для редактирования в Windows, это удобно.
  • Всегда делайте бэкап.
  • Htaccess применяется к каталогу, в котором находится, и, таким образом, ко всем каталогам уровнем ниже; это значит, что при перемещении в корневой каталог, он сможет управлять всем сайтом.
  • Ошибки в htaccess провоцируют 500 Internal Server Error ( внутреннюю ошибку сервера), но без паники - восстановите резервную копию или откомментируйте последний код.
  • Перезапись кода

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

    ## Rewrite Engine Code ##

    Options +FollowSymLinks

    RewriteEngine on

    Управление ошибками

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

    Вы можете создавать собственные страницы в любом формате PHP/HTML.

    Они не обязательно должны быть в корневом каталоге, но обязательно на одном сервере.

    Если поместите URL целиком, тогда статус 404 не появится, скорее всего будет 301 или 200 Error.

    ErrorDocument 404 http://www.example.com/404.html

    ## Error Handling Codes ##

    ErrorDocument 401 /401.html

    ErrorDocument 403 /403.html

    ErrorDocument 404 /404.html

    ErrorDocument 400 /400.html

    Можно использовать больше или меньше кодов. Полный список кодов ошибок по ссылке Wikipedia .

    Временная блокировка индексации

    К примеру, может понадобиться, чтобы некоторое время люди вначале попадали на промостраницу. (Вы можете использовать index.php и для других целей).

    Это больше относится к сфере общей безопасности и юзабилити, чем к .

    Этот сниппет кода блокирует доступ пользователей к спискам файлов.

    ## Block Index Display ##

    Options All -Indexes

    Set Default Index File

    В любом случае, это удобный код. Нужно только изменить файл; тип файла не обязательно должен быть в HTML.

    ## Set Default Index Files ##

    DirectoryIndex newindex.html

    Защита Htaccess

    Ваш файл htaccess потенциально уязвим, поэтому обезопасьте его.

    ## Secure htaccess file ##

    Order Allow,Deny

    Если у вас WordPress, такой код защитит файл wp-config.php.

    ## Secure wp-config.php ###

    Order Allow,Deny

    Защита локации паролем

    С помощью htaccess вы можете защитить определенные сегменты сайта. Вот полезный инструмент для создания этих файлов http://www.tools.dynamicdrive.com/password/

    Так, с помощью и похожего файла htpasswd вы можете блокировать общий доступ к любому файлу или папке на сайте.

    Используя тот же метод, что и для htaccess, создайте текстовый файл без названия, тип файла htpasswd. Он будет содержать список имен пользователей и паролей для входа в закрытые разделы, формат такой:

    Нужно загрузить файл htpasswd в соответствующее место на сервере с помощью любой программы для пересылки файлов, это должен быть каталог не для общего доступа (не помещайте в /www/ или /htdocs/ ). И еще нужно записать путь файла из корневого каталога, это может выглядеть так:

    “ /private/script/.htpasswd “.

    После загрузки в htaccess добавляется новый раздел.

    AuthName “Restricted Area”

    AuthUserFile /private/script/.htpasswd

    require valid-user

    Блокировка прямых ссылок (хотлинкинг)

    htaccess экономит полосу пропускания, таким образом решается проблема известная как хотлинк (включение в веб-страницу ресурсов чужого сервера) .

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

    ## Block Hotlinking ##

    RewriteEngine On

    RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/

    RewriteCond %{HTTP_REFERER} !^$

    Если только 1-2 специфических сайта (обычно социальные) приводят к данной проблеме, используйте код:

    ## Block Hotlinking ##

    RewriteEngine On

    RewriteCond %{HTTP_REFERER} ^http://(.+\.)?myspace\.com/

    RewriteCond %{HTTP_REFERER} ^http://(.+\.)?friendfeed\.com/

    RewriteCond %{HTTP_REFERER} ^http://(.+\.)?livejournal\.com/

    RewriteRule .*\.(jpe?g|gif|bmp|png)$ – [F]

    Это крайняя мера, которую стоит применять в случаях, когда имеются частые хотлинкеры .

    «Сохранить как»

    Если у вас блог или другой контентный сайт, определенные файлы будут провоцировать диалог “Save As” (сохранить как), вместо того, чтобы браузер их загружал. Этот код идеален для каталога ресурсов.

    Целесообразнее выбрать определенный подкаталог для кода.

    ## Force a file to download with a “Save As” ##

    AddType application/octet-stream .doc .mov .avi .pdf .xls .mp4

    Перенаправить всех, c сохранением IP

    Этот способ удобен во время внеплановых работ по технической части.

    ## Redirect Everyone but Selected IP Address ##

    ErrorDocument 403 http://www.myoldsite.com

    Order deny,allow

    Allow from 111.111.111.111

    Понадобится изменить ваш собственный IP-адрес (скопировать линию для каждого IP сотрудников), и отключить это, когда все будет готово.

    Выборочная блокировка IP

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

    Также вы можете с помощью этого сайта сгенерировать код блокировки любых IP:

    ## Block IP Address ##

    order allow,deny

    deny from 127.0.0.1

    deny from 127.0.0.2

    deny from 127.0.0.3

    Раздел 2: перенаправления и перепись

    Htaccess позволяет переписать и изменить URL, заменить автоматически созданные ссылки.

    Перенаправление с http:// на www

    Это старая проблема - добиться, чтобы сайт индексировался и в http://mydomain.com, и в www.mydomain.com.

    Иногда бывает так, что сайт индексируется дважды, что не совсем хорошо в плане SEO.

    Данная часть кода превратит любой запрос для версии http в www.

    ## Redirect non-www to the www version ##

    RewriteCond %{HTTP_HOST} ^example.com

    RewriteRule ^(.*)$ http://www.example.com/$1

    Измените example.com на своей домен.

    Перенаправление файла индекса (Index File) в корневой каталог

    Еще одна проблема двойной индексации: поисковики индексируют и

    www.example.com/ и www.example.com/index.php.

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

    ## Redirect index to root ##

    RewriteCond %{THE_REQUEST} ^{3,9}\ /.*index\.html\ HTTP/

    RewriteRule ^(.*)index\.html$ /$1

    В этом коде нужно изменить и название файла индекса (в 99% случаев это просто индекс), и расширение (обычно html, htm or php).

    Перенаправление всех страниц на SSL

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

    Еще понадобится сертификат безопасности и настройки сервера.

    RewriteCond %{REMOTE_HOST} !^111\.11\.11\.11

    RewriteCond %{REQUEST_URI} !^/downtime\.html$

    RewriteRule ^(.*)$ /downtime.html

    ## Redirect all Pages to Secure ##

    RewriteCond %{HTTPS} !on

    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

    Стандартное перенаправление 301

    Перенаправление 301 сообщает Google и браузерам, что запрашиваемая страница перемещена в другое место.

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

    Это намного лучше в сравнении со страницей 404, так, по крайней мере, внешние ссылки будут попадать на рабочие страницы.

    ## Standard 301 Redirect for Permanent Changes ##

    redirect 301 /old-page.html http://www.example.com/newpage.html

    Нужно изменить только две ссылки: первая - это старая страница, связанная с htaccess (обычно в корне), и вторая - полная ссылка на новую локацию. У вас может быть столько линий, сколько вы хотите перенаправить, но не стоит перенаправлять один и тот же url несколько раз.

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

    Стандартное перенаправление (301) - подкаталог

    Может понадобиться перенаправление всех подкаталогов сайта, возможно, вы переместили весь блог в корневой каталог , или убрали старый раздел статей.

    Есть два способа сделать это:

    ## Redirect for a Directory – Preserves Request ##

    Первый - сохраняет запрашиваемый файл. Если кто-то запрашивает mysite.com/blog/example.html - последует перенаправление на mystie.com/example.html.

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

    Лучше убедиться, что новые файлы присутствуют, в противном случае появится 404.

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

    ## Redirect a Directory – Does not preserve Request ##

    RedirectMatch 301 ^/old-folder(.*)$ http://www.example.com/new-page.php

    Опять же, кастомизировать эти коды очень просто. Нужно лишь вписать старый каталог и новые локации . Если хотите перенаправить на новый подкаталог, просто измените окончание url, чтобы там был подкаталог, но проверьте, что вы оставили $1 в первом примере.

    302

    Разница между пренаправлениями 301 и 302 в том, как их фиксируют поисковые роботы. Google вряд ли обновит свой индекс для 302, но для 301 это очень даже вероятно. 302 стоит использовать только тогда, когда изменения временные и вы хотите, чтобы Google их игнорировал. Чтобы превратить перенаправление в 302, просто измените цифру в начале. Это работает применительно ко всем сниппетам кодов перенаправления, где используется 301.

    ## Standard 302 Redirect for Temporary Changes ##

    redirect 302 /old-page.html http://www.example.com/newpage.html

    Изменение типа запросов файлов

    Иногда нужно изменить типы файлов, для лучшего сжатия изображений, или для специального дополнения с php; htaccess справится со всем этим.

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

    ## Code to make all HTML requests become PHP requests ##

    RedirectMatch 301 (.*)\.html$ http://www.example.com$1.php

    Для кастомизации вы можете заменить типы файлов, в данном случае html - старый тип, а php - новый.

    Перенаправьте все подкаталоги, за исключением корневого каталога

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

    ## Redirect an Entire Domain – Preserve Request ##

    RewriteRule (.*) http://www.newdomain.com/$1

    ## Redirect all Subfolders to New Domain but Keep Root Intact ##

    RewriteRule ^([^/]+)\/(.*)$ http://www.example.com/$1/$2/$3

    Перенаправление всего домена

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

    У вас должен быть Google Webmaster Tools, установленный на старом домене, затем вы сможете сообщать Google, что перемещаете домены.

    Есть два способа: с сохранением запросов и без. Если у нового домена будет такой же сайт и столько же страниц и ресурсов, тогда лучше сохранить запросы. Другими словами, пользователь, запрашивающий /best-page.html на старом сайте, увидит best-page.html на новом.

    Вы можете сделать полное перенаправление домена без сохранения запросов.

    По сути, нужно отдельно перенаправить разделы веб-сайта на соответствующие разделы нового сайта, но есть более простой способ.

    ## Redirect an Entire Domain – No Preservation ##

    Redirect 301 / http://www.newdomain.com

    Перепись динамического URL

    Большинство динамических URL выглядят примерно так:

    http://www.mysite.com/posts.php?category=widgets

    Они состоят из домена, файла и строки запросов, которая, в свою очередь, состоит из двух частей : поля и значения.

    Для оптимизации URL нужно убрать строку запросов и использовать ее для создания структурированного URL.

    В первом случае сделаем URL, который заканчивается как статический файл, то есть превратим URL в http://www.mysite.com/posts-about-widgets.php

    RewriteRule ^posts-about-([^/]+).php/?$ /posts.php?category=$1&foo=bar [L]

    RewriteCond %{QUERY_STRING} category=([^/]+)

    Задается маппинг старого URL на новом.

    Здесь три линии; первая определяет место старого URL на новом, вторая - место 1-ой строки запросов, третья - точка остановки, чтобы избежать беспрерывного перенаправления.

    Первая линия позволяет установить формат новой страницы, в нашем случае это http://www.mysite.com/posts-about-widgets.php.

    Вы можете изменить первую часть URL.

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

    В этом примере - посты из категории виджетов, поэтому нужны соответствующие ключевые слова в URL.

    PHP - тип файла, который используется в данном случае, но это может быть html или htm.

    Третья выделенная часть содержит оригинальный URL и строку запросов. Включено только поле, значение переносится как переменная.

    Теперь у нас новая страница, но, вероятнее всего, система все еще будет генерировать старые ( уродливые) URL, поэтому нужно перенаправить людей на новую страницу. Для этого понадобится правило переписи/замены Rewrite Rule , которое заменяет запросы для строки запросов в новом ярком URL:

    RewriteRule ^posts\.php$ /posts-about-%1.php?

    Относительно просто, не так ли? Нужно только поместить ваш старый URL в первую часть, ваш новый URL - во вторую часть. И вуа-ля! Динамическое перенаправление на новую страницу со старой переменной готово!

    Совместим части кода. Мы заменили пример с текстом для вставки, чтобы запомнить части, к которым относится каждое утверждение (statement).

    Возможно, вы захотите перейти к новому типу URL, возможно, вернуться обратно, к странице http://www.mysite.com/posts/widgets instead of that .php. Это также возможно, нужно лишь немного изменить код.

    ## Rewrite Dynamic URL to A Static Page ##

    RewriteRule ^new-page-([^/]+).php/?$ /old.php?field=$1&foo=bar [L]

    RewriteCond %{QUERY_STRING} !foo=bar

    RewriteRule ^old\.php$ /new-page-%1.php?

    ## Rewrite Dynamic URL to A Static SubFodler ##

    RewriteRule ^new-folder/([^/]+)/?$ /old.php?field=$1&foo=bar [L]

    RewriteCond %{QUERY_STRING} field=([^/]+)

    RewriteCond %{QUERY_STRING} !foo=bar

    RewriteRule ^old\.php$ /new-folder/%1/?

    Здесь все так, как и прежде, но в данном случае мы назвали первый подкаталог вручную и позволили полю стать вторым подкаталогом.

    Раздел 3: скорость и тонкая настройка

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

    GZIP compression

    GZIP compression - серверная функция, которая уменьшает вес веб-страниц и скриптов прежде, чем они отправляются в браузер.

    Прежде эта технология была довольно несовершенной, в особенности в безопасных разделах и платежных шлюзах. Сейчас все на порядок лучше. Большая часть браузеров (даже старых) принимает GZIP.

    Есть несколько вариантов активировать GZIP. Не нужно изменять код - просто скопируйте и вставьте.

    На этом сайте можно проверить, активирован ли GZIP на вашем ресурсе, и сколько времени/места сэкономлено.

    Вот четыре способа, выберите один из них:

    ## Enable GZIP Version 1 ##

    php_value output_handler ob_gzhandler

    css_value output_handler ob_gzhandler

    js_value output_handler ob_gzhandler

    ##ENABLE GZIP Version 2##

    mod_gzip_dechunk Yes

    mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$

    mod_gzip_item_include handler ^cgi-script$

    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.*

    ##Enable GZIP Version 3##

    SetOutputFilter DEFLATE

    SetOutputFilter DEFLATE

    SetOutputFilter DEFLATE

    SetOutputFilter DEFLATE

    ##Enable GZIP Version 4##

    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 no-gzip

    BrowserMatch bMSIE !no-gzip !gzip-only-text/html

    Активация кэширования

    Кэширование позволяет постоянным посетителям не загружать повторно каждый элемент сайта. Если у вас WordPress, тогда можно взять несколько плагинов, например WP Hyper Cache.

    Если у вас статический сайт, htaccess дает возможность применить кэширование. Стоит все перепроверить. Если у вас нестандартная CMS, или какой-либо динамический контент, ошибки с кэшированием могут привести к тому, что сайт перестанет обновляться. Поэтому стоит консультироваться с разработчиками.

    Если нужна более расширенная команда кэширования или больший уровень контроля, лучше использовать скрипт в этой ветке WMW , читайте внимательно, чтобы точно знать, что делаете.

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

    ## Enable Caching ##

    ## Files to Cache for One Month ##

    Header set Cache-Control “max-age=2592000”

    ## Files to Cache for One Week ##

    Header set Cache-Control “max-age=604800”

    ## Files to Cache for One Day ##

    Header set Cache-Control “max-age=43200”

    ## Disable cache for script files ##

    Header unset Cache-Control

    GZIP и кэширование существенно улучшают производительность сайта.

    Минимизация 404 за счет проверки грамматических ошибок

    Check Spelling - это модуль сервера Linux Server Module. Check Spelling проверяет сервер на предмет наличия подобных URL.

    К примеру, пользователь допускает ошибку, вписывая в браузер такой адрес:

    http://www.mysite.com/caje/red.html

    Но на самом деле он/она хотел написать:

    http://www.mysite.com/cake/red.html

    Check Spelling фиксирует такую незначительную ошибку и исправляет ее (если, конечно, не существует caje/red.html). Также учитывается состояние регистра строчных и прописных символов в URL.

    ##Make Linux correct case sensitive urls/slight typos in urls##

    Начнем издалека, чтобы и новичкам был понятен принцип работы описываемого в статье файла. Для функционирования сайта в Интернете нужен не только компьютер и выход к сети, но и установленное на него специальное ПО, которое обеспечивает доступ к данным по протоколам http и https. Таким программным обеспечением и является веб-сервер. Существуют различные типы веб-серверов, но самый распространенный - Apache. Он построен на открытом коде, предоставляется бесплатно, постоянно дорабатывается и улучшается, совместим с многими скриптами и работает почти на всех платформах, включая Windows, Linux, Netware 5.x.

    Настраивается Apache через конфигурационные файлы, которые хранятся в текстовом формате. С их помощью можно задать определенные правила действия веб-сервера. Главный конфигурационный файл называется httpd.conf или apache.conf (в зависимости от дистрибутива ОС). Во многих случаях все конфигурации сервера можно указывать именно здесь, и в основном такой способ предпочтительней, потому что:

    А) уменьшает время ответа веб-сервера при запросе (так при каждом обращении к веб-серверу Apache не будет просматривать все каталоги на наличие.htaccess); б) некоторые директивы, например директивы модуля mod_rewrite, во многих отношениях работают лучше из главного конфигурационного файла.

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

    Что такое.htaccess и для чего он нужен

    Файл (или файлы) .htaccess будет задавать правила работы веб-сервера только в каталоге, где он размещен, и его дочерних каталогах, без глобальных изменений работы всего сервера. Возможность использовать.htaccess прописывается директивой (т.е. командой) AllowOverride в главном конфигурационном файле httpd.conf, название которой прямо говорит о том, что настройки внутри.htaccess приоритетны перед настройками в httpd.conf (если иное не ограничено все той же директивой AllowOverride). С помощью этой директивы можно позволить все, а можно - только некоторые действия. Детальную инструкцию по его применению можно найти на сайте Apache.

    С ней, при каждом обращении к веб-серверу, Apache будет просматривать все каталоги на наличие.htaccess. Изменения в файле действительны сразу после сохранения - перезагрузка всего веб-сервера не нужна (в отличие от изменений в httpd.conf).

    Имя файла.htaccess - общепринятое, но вовсе не обязательное. В httpd.conf можно задать другое имя с помощью директивы AccessFileName , например, так:

    AccessFileName .config

    Как создать файл.htaccess

    Как уже говорилось, конфигурационные файлы имеют текстовый формат, и создать.htaccess также можно с помощью текстового редактора (например, Блокнота или NotePad++ в Windows).

    Имя файла - .htaccess (с точкой в начале);

    тип - «Все файлы»;

    формат переноса по словам;

    режим ASCII (при загрузке.htaccess на хостинг по FTP-протоколу).

    Apache - регистрозависимый веб-сервер, поэтому важно написать название маленькими буквами: .HTaccess и.htaccess - это разные файлы.

    В Mac ОS файлы, начинающиеся с точки, невидимы. Поэтому вы можете назвать его иначе и после, переместив по FTP на хостинг, переименовать. Обычно размещают файл в корневой директории веб-сервера (/public_html ) либо в корневой директории сайта (/public_html/site.com/ ).

    Синтаксис.htaccess

    Синтаксис.htaccess аналогичен синтаксису httpd.conf. Для каждой директивы предполагается отдельная строка. Для своего же удобства вы можете вносить в файл комментарии с помощью знака #, и значение после # будет игнорироваться веб-сервером. Этот трюк можно использовать для отключения любой директивы. Ее не нужно удалять полностью из файла – достаточно просто закомментировать.

    Возможности конфигурационного файла огромны. Ниже приведены базовые настройки в.htaccess.

    Возможности.htaccess Контроль доступа

    Запрет веб-доступа:

    Order Deny,Allow Deny from all

    Запрет веб-доступа, кроме IP:

    Order deny,allow deny from all allow from xxx.xxx.xxx.xxx

    Запрет веб-доступа для IP:

    Order allow,deny Allow from all Deny from xxx.xxx.xxx.xxx

    Запрет доступа к файлу:

    Order allow,deny Deny from all

    Защита директории с помощью пароля:

    AuthType Basic AuthName "Directory Name" AuthUserFile /home/cpanel_user/.htpasswds/public_html/smth/passwd require valid-user # где "Directory Name" - имя директории,которую нужно защитить, а # /home/cpanel_user/.htpasswds/public_html/smth/passwd - путь к файлу passwd с логинами и паролями разрешенных пользователей. # В файле должны быть записи вида пользователь:пароль

    Работа с ошибками веб-сервера

    Иногда вместо ожидаемой страницы посетитель может натолкнуться на ответ веб-сервера в виде ошибки с лаконичным, но не всегда понятным для простого пользователя объяснением причины. Полный список кодов состояния можно найти в Википедии . Для самых распространенных (например, 404 или 500 ошибки) желательно создать свою страницу, которая лучше смотрится и представляет посетителю пути выхода. Задается она следующим образом:

    ErrorDocument 404 http://yourdomain.com/error/404.html # где http://yourdomain.com/error/404.html - путь к созданной странице.

    P.S. Пользователи услуги от сайт могут воспользоваться для создания своей страницы функционалом контрольной панели cPanel (в разделе «Расширенный » пункт «Страницы ошибок »).

    Настройка 301 редиректа в htaccess

    Для создания постоянного перенаправления используется директива 301 редиректа, которая передает весь вес страницы на новый URL (поэтому оно предпочтительней, чем 302 редирект - в целях SEO).

    Перенаправление всего сайта на новый домен:

    Redirect 301 / http://www.newdomain.com/

    Перенаправление страницы на новую:

    Redirect 301 /page1.html http://mydomain.com/page2.html

    Модуль перенаправления mod_rewrite

    Незаменимым механизмом для изменения URL-ссылок “на лету” является модуль mod_rewrite . Его полезность, а вместе с тем, сложность заключается в том, что можно использовать несметное количество правил, включающих еще больше переменных.

    Для работы модуля, прежде всего, нужны директивы:

    RewriteEngine On (включает работу механизма преобразования)

    Options FollowSymLinks (условие для работы mod_rewrite).

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

    RewriteRule

    Одной из самых функциональных директив модуля mod_rewrite является RewriteRule . Для того чтобы указать условие, при котором будет работать правило, используется директива RewriteCond . Она (одна или несколько) обязательно прописывается перед RewriteRule.

    Перенаправление страницы на новый домен:

    RewriteRule ^page1\.html$ http://newdomain.com/

    Перенаправление сайта с домена без www на домен с www:

    RewriteEngine On RewriteCond %{HTTP_HOST} !^www\..* RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1

    И наоборот:

    RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1

    Перенаправление по протоколу HTTPS (предварительно нужно установить ):

    RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

    Эти строки необходимо разместить в самом верху.htaccess.

    Определение кодировки

    Таблицу символов, в которой следует открыть сайт, определяет браузер. Однако, можно задать кодировку по умолчанию:

    AddDefaultCharset UTF-8

    Такое изменение распространяется в пределах действия.htaccess и на все страницы сайта. Можно задать кодировку для определенного типа файла, например windows-1251 для html:

    AddType "application/x-httpd-php3; charset=windows-1251" .html

    Часто сама страница несет в себе (а именно в заголовке) информацию об используемой кодировке. Нужно проверить, чтобы указанная кодировка в документе и в конфигурационном файле совпадали. Приведенная здесь utf-8 практически всегда требуется при работе популярных cms, так как они рассчитаны на большой круг пользователей по всему миру. Кстати, по умолчанию эта же кодировка настроена и на наших серверах виртуального хостинга.

    Другие возможности

    – Определить индексный файл сайта:

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

    DirectoryIndex index.php

    – Полезной директивой является FilesMatch, которая оговаривает пределы действия правила по названию файла, используя регулярные выражения. С ее помощью, например, можно запретить доступ к определенным файлам:

    Order Allow,Deny Deny from all

    Есть некоторые директивы, которые не поддерживаются на наших серверах с виртуальным хостингом, но вы можете их разрешить на своем ВПС.

    Причина в том, что работающий как suPHP веб-сервер не поддерживает php_flag и php_value . Поэтому мы предлагаем использовать сPanel (крайне полезен подраздел “Выбор версии РНР ”, для работы с error_log – “Журнал ошибок ”) или создать локальный файл php.ini для этой цели. Пару директив мы все-таки привели ниже:

    – Для того, чтобы избежать зависания веб-сервера при обработке некорректно написанных скриптов, существует max_execution_time . С ее помощью указывается время в секундах, отведенное на обработку РНР-скрипта. Можно увеличить время ожидания веб-сервера при выполнении скрипта:

    Php_value max_execution_time 60

    – Определить максимальный размер загружаемого файла:

    Php_value upload_max_filesize 128M (здесь вместо 128 поставьте нужное значение).

    – Вывести ошибки РНР в отдельный файл:

    Php_flag log_errors on php_value error_log /home/path/to/public_html/domain/PHP_errors.log # PHP_errors.log - название файла, а # /home/path/to/public_html/domain - путь к нему).

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

    Если.htaccess не работает

    Проверить работу файла можно, прописав несложные директивы, которые при правильном синтаксисе и верных настройках httpd.conf (как описывалось в начале статьи) должны сработать:

    – например, запретив доступ к сайту извне с помощью директивы

    Order deny,allow Deny from all

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

    Если проблема действительно существует, нужно в первую очередь искать причину в главном конфигурационном файле:

    – убедиться, что сервер разрешает использование файла.htaccess: есть запись AllowOverride All (и она не закомментирована с помощью #);

    – проверить, что создана запись VirtualHost для домена. В качестве примера:

    DocumentRoot /www/example1 ServerName www.example.com # Другие директивы

    – название файла дополнительной конфигурации указано как вам нужно. Если это.htaccess, то:

    AccessFileName .htaccess

    – присутствует хостнейм сервера (указывается при создании URL-перенаправлений) в виде IP-адреса сервера или домена:

    ServerName www.example.com

    Если же причина не в httpd.conf, нужно проверить сам.htaccess на наличие синтаксических ошибок. Можно воспользоваться онлайн-сервисами (например, http://www.htaccesscheck.com/ , http://htaccess.madewithlove.be/), или - , где есть полный перечень директив вместе с синтаксисом.

    Крайне желательно перед любым редактированием делать резервную копию файла – чтобы при худшем исходе можно было «откатить» изменения обратно.

    Хотя изменения и сразу вступают в силу, кэш браузера никто не отменял. Для проверки работы сайта после редактирования.htaccess регулярно пользуйтесь его очисткой или загружайте страницу в обход кэша - через комбинацию клавиш Ctrl + F5 (в Safari: Ctrl + R , в Mac OS: Cmd + R ).

    Самая распространенная ошибка веб-сервера при работе с.htaccess - 500. Она указывает на проблему в синтаксисе (опечатка в директиве, например), либо же в главном конфигурационном файле не разрешен такой тип директивы.

    Полезные ссылки

    Лучший источник вдохновения для работы с.htaccess:

    Многие инструкции по работе с.htacess, на русском.

    Мы используем Apache httpd в качестве основного веб-сервера. Apache используется для организации большинства веб-серверов в мире и является самым массовым продуктом своего класса. Этот сервер обладает обширными возможностями конфигурации, является очень производительным и поддерживает все известные протоколы для работы веб-серверов. Специально для Apache созданы версии таких популярных языков программирования как Perl и PHP, а также этот сервер легко интегрируется с широко применяемыми СУБД (например, MySQL).

    Главный сайт проекта находится по адресу httpd.apache.org , а основная документация по версии 1.3.хх доступна на странице httpd.apache.org/docs/ .

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

    Индексный файл

    Индексный файл или файл-индекс — это тот файл, который открывается по умолчанию при обращении пользователя через веб к каталогу, а не к конкретному файлу. Например, ваш посетитель запросит адрес http://ваш_домен/price/ , где price — название каталога. Индексный файл это тот файл, который будет показан пользователю при обращении к каталогу без указании имени конкретного файла в нем.

    По умолчанию индексными файлами являются следующие: index.html, index.htm, index.php, index.php3, index.phtml, index.shtml, default.htm или default.html. Если вы хотите чтобы первым открывался какой-то иной файл, нужно переопределить текущие значения. Как это сделать читайте .

    Назначение и использование файла .htaccess

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

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

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

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

    Web Application Firewall

    Web Application Firewall (ModSecurity) необходим для обнаружения и предотвращения атак на веб-сайты. Проверка осуществляется определенным набором правил и, если она не пройдена, запрос к сайту отклоняется с ошибкой (403 forbidden).

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

    • SecRuleRemoveById - удалить правило по id
    • SecRuleRemoveByTag - удалить правило по тегу.

    Определить, какое именно правило необходимо отключить, можно в журнале ошибок error.log

    Пример отключения по ID :

    SecRuleRemoveById 933100 933150

    Примеры отключения по Tag :

    SecRuleRemoveByTag "attack-injection-php" SecRuleRemoveByTag "CWAF" Переопределение кодировки:

    По умолчанию веб-сервер «отдает» все html-документы, которые размещены на сервере в кодировке windows-1251. Изменить тип кодировки, в которой веб-сервер будет «отдавать» информацию, можно в личном кабинете .

    Для этого перейдите в раздел «Древо услуг» и выберите домен, для которого необходимо изменить тип кодировки. Далее в списке параметров найдите строчку кодировка (по умолчанию) и нажмите на добавить , как показано на рисунке ниже.

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

    AddType "text/html; charset=koi8-r" .html .htm .shtml

    Получив такой .htaccess , веб-сервер Apache станет выдавать клиентскому браузеру заголовок, в котором будет указано, что документ имеет кодировку koi8-r.

    Если на вашем ресурсе существуют html-документы в разных кодировках, (ISO-8859-1, Windows-1250, Windows-1252, UTF-8), то вам, возможно, будет необходимо отключить принудительную выдачу заголовка с кодировкой windows-1251. Для этого в .htaccess добавляется строка:

    AddDefaultCharset Off

    При этом соответствующая кодировка должна быть прописана на каждой html-странице в виде тега

    Пример: как закрыть директорию паролем

    Одна из стандартных задач, которая решается путем использования .htaccess , это ограничение доступа к определенному каталогу на сервере. Например, нужно дать доступ к определенному каталогу отдельным посетителям, снабдив их при этом уникальным логином и паролем.

    В каталоге, к которому хотим ограничить доступ по паролю, создаем файл .htaccess с такими директивами:

    AuthType Basic AuthName "Some Name" AuthUserFile /home/uXXXXX /.htpasswd require valid-user

    Путь /home/uXXXXX/.htpasswd обозначает полный путь к файлу паролей на диске нашего сервера. Если, например, вы поместите файл .htpasswd (в нем будут пароли) в домашний каталог, куда вы попадаете зайдя на сервер по FTP, то путь к этому файлу будет иметь вид /home/uXXXXX/.htpasswd , где uXXXXX — наименование вашей виртуальной площадки (например, u12345).

    В директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями, который мы создадим чуть позже. Если вы создаете файл .htaccess на своем компьютере, а не сразу на сервере при помощи текстового редактора, обратите внимание на то, что .htaccess должен передаваться по FTP строго в текстовом (ASCII) режиме .

    Создаем файл паролей. Файл с паролями должен содержать строки вида login:password . Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл — воспользоваться программой, входящей в поставку Apache — htpasswd (на нашем сервере она находится в каталоге /usr/local/bin/ , полный путь — /usr/local/bin/htpasswd ).

    Рассмотрим как создать файл паролей в unix shell прямо на сервере. Зайдем в shell, и будем выполнять следующие команды:

    • htpasswd -mbc .htpasswd user1 sNQ7j9oR2w создаем новый файл .htpasswd, в который добавляем запись для пользователя user1 с паролем, указанным в командной строке. Просьба обязательно заменить sNQ7j9oR2w на любой собственный пароль — здесь этот пароль указан только для примера
    • htpasswd .htpasswd user2 добавляем в уже существующий файл .htpasswd пользователя user2, а пароль вводим вручную в ответ на соответствующий запрос программы

    Если вы используете Windows и не хотите пользоваться unix shell для генерации паролей, можно загрузить Windows-версию программы htpasswd и создать файл с паролями на своем компьютере, после чего загрузить его на сервер. Если у вас уже установлена Windows-версия Apache, файл htpasswd.exe можно найти в каталоге Program Files\Apache Group\Apache\bin\ .

    Итак, получите htpasswd.exe и используйте его для генерации паролей таким образом:

    • htpasswd.exe -mc .htpasswd user1 создаем новый файл паролей htpasswd.exe , пароль и его подтверждение будут запрошены интерактивно
    • htpasswd.exe -m .htpasswd user2 добавляем пользователя user2 в существующий файл паролей htpasswd.exe , запросив пароль интерактивно

    После окончания заведения всех логинов файл нужно загрузить на сервер.

    Пример: переопределение индексного файла

    Ситуация: пользователь обратился к каталогу http://www.ваш_домен.ru/price/. При таком запросе первым откроется и будет показан . Если вы хотите переопределить индексный файл и сделать так, чтобы первым открывался не index.htm, а, например, файл myindex.php , то сделать это можно поместив в файл.htaccess в соответствующем каталоге следующую инструкцию:

    DirectoryIndex myindex.php

    Получив .htaccess с таким содержимым, веб-сервер Apache откроет по умолчанию именно файл myindex.php.

    Пример: запрет и разрешение выдачи листинга

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

    Options +Indexes

    Файл .htaccess необходимо создавать именно в том каталоге, в котором планируется разрешить листинг. Данная директива будет действовать также и на все подкаталоги (это достигается включенной по умолчанию в настройках виртуального хоста директивой AllowOverride All ).

    По умолчанию включена директива Options -Indexes , и в случае вы получите HTTP ошибку 403.

    Если кодировка в именах файлов отображается не корректно, воспользуйтесь свойством Charset, чтобы указать нужную кодировку. Например для отображения кириллических символов в кодировке UTF-8 добавьте в файл.htaccess следующую инструкцию:

    IndexOptions Charset=UTF-8 Пример: собственные страницы ошибок Пример: запрет доступа с некоторых IP-адресов

    Иногда возникает необходимость запретить доступ к сайту или его части с некоторых IP-адресов.

    В таком случае необходимо создать в нужной директории файл .htaccess с директивами. Например, чтобы запретить доступ с IP-адреса 172.16.16.16:

    Order Allow,Deny Allow from All Deny from 172.16.16.16

    Теперь при попытке обратиться к сайту с IP-адреса 172.16.16.16 посетитель получит ошибку 403 или вашу страницу для этой ошибки .

    Указание части адреса в виде 172.16.16 ограничит доступ из подсети 172.16.16/24.

    Иногда требуется выполнить обратное действие и заблокировать доступ к сайту для всех IP кроме вашего (). Например, чтобы открыть доступ только для IP-адреса 172.16.16.16, добавьте следующую инструкцию в файл.htaccess:

    Order Allow,Deny Allow from 172.16.16.16

    С более подробной документацией вы можете ознакомиться в документации по Apache .

    Пример: запрет доступа к некоторым файлам

    Иногда возникает необходимость запретить доступ к определенным файлам. Например, к конфигурационным файлам, содержащим реквизиты доступа к базам данных, интерфейсам и т.п. Допустим, в файле config.cfg вы храните логин/пароль доступа к базе данных. Создаем в этой директории файл .htaccess с директивами:

    Order allow,deny Deny from all

    Теперь, если посетитель наберет в браузере нечто вида http://www.ваш_домен.ru//config.cfg , он получит ошибку 403 или вашу страницу для этой ошибки.

    Пример: заголовок last-modified

    В ряде случаев требуется, чтобы web-сервер выдавал HTTP-заголовок Last-Modified . К примеру, при регистрации вашего ресурса на Яндексе , возникает ошибка «Неправильные даты ». Для статических документов cервер будет выдавать значение last-modified всегда. Это действительно для html-файлов. Для SSI cервер будет выдавать значение last-modified в том случае, если прописана директива «XBitHack full» (просто пропишите эту строку в .htaccess ), и для файла, к которому происходит обращение, выставлен атрибут «исполняемый» для группы. В скриптах last-modified выдается иными средствами. Например, если учесть то, что php-скрипт генерирует код динамически, то самым логичным будет в качестве last-modified отдавать текущую дату и время./>

    Реализуется это следующим образом:

    Внимание: команда header должна выполняться в php-скрипте до того, как скрипт начнет выдавать html-текст в браузер пользователя.

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

    Файл.htaccess использует такой же формат, как и основной конфигурационный файл для Apache: httpd.conf . Большинство установок можно использовать и в том и в другом файлах.

    Установки, заданные в файле.htaccess в каталоге, будут иметь более высокий приоритет перед установками, заданными в httpd.conf , для данного каталога и его подкаталогов.

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

    Перенаправления и изменение URL

    Популярное использование файла.htaccess - задание перенаправлений или изменений URL. Данный метод помогает в целях SEO изменять имя домена, или перестраивать файловую структуру проекта, или делать длинные трудно запоминаемые адреса URL простыми и понятными.

    Перенаправления

    Перенаправления могут быть очень простыми, например:

    Redirect 301 ^old\.html$ http://localhost/new.html

    В данном случае используется код статуса HTTP 301 (перемещено постоянно) и все запросы к old.html перенаправляются на new.html . Здесь используется регулярное выражение для определения соответствия URL правилу, что добавляет сложности в построение правила, но придает уверенности в правильности URL. Требуется указывать полный адрес URL ресурса, на который происходит перенаправление.

    Изменения

    Правило изменения также может быть очень простым:

    RewriteEngine on RewriteRule ^old\.html$ new.html

    В данном примере происходит простое перенаправление с одного файла на другой, которое выполняется прозрачно, без изменения содержания адресной строки в браузере. Первая директива, RewriteEngine on , просто гарантирует, что механизм изменения запущен.

    Чтобы обновить содержание адресной строки браузера посетителя, мы можем использовать флаг R в конце правила RewriteRule:

    RewriteRule ^old\.html$ http://hostname/new.html

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

    Одно возможное использование перенаправлений - изменение адресов URL к более простой форме для посетителей и поисковых роботов. Рассмотрим пример:

    RewriteRule ^products/([^/]+)/([^/]+)/([^/]+) product.php?cat=$1&brand=$2&prod=$3

    Данное правило позволяет использовать посетителю адрес URL наподобие products/turntables/technics/sl1210 , который будет трансформироваться в product.php?cat=turntables&brand=technics&prod=sl1210. Круглые скобки между слешами в регулярном выражении примера выполняют объединение в группы - мы можем использовать каждую из них как $1 , $2 и $3 соответственно. Комбинация [^/]+ в скобках соответствует любому символу, кроме слеша, в любых количествах.

    На практике, изменение URL имеет существенно более сложные правила, чем описанные в наших примерах, но они позволяют решить очень сложные задачи.

    Пользовательская страница ошибок

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

    Правило для изменения странницы 404 очень похоже на правило перенаправления:

    ErrorDocument 404 "/404.html"

    Если происходит ошибка 404, будет выводиться указанная страница. Также можно сделать страницы для отображения других серверных ошибок.

    Ограничения доступа к определённым ресурсам

    С помощью файла.htaccess мы можем ограничить доступ к любому файлу или каталогу. Например, код:

    AuthName "Введите имя пользователя и пароль" AuthUserFile /path/to/.htpasswd Require valid-user AuthType Basic

    Нужно разместить в каталоге, который требуется защитить от свободного доступа. Директива AuthName определяет сообщение, которое будет выводиться в диалоговом окне для ввода пароля, а в правиле AuthUserFile определяется путь к файлу.htpasswd . Директива Require определяет, что только зарегистрированные пользователи могут получить доступ к файлу.

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

    AuthName "Введите имя пользователя и пароль" AuthUserFile /path/to/.htpasswd Require valid-user AuthType Basic

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

    Блокируем доступ для определенных посетителей

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

    Order allow,deny deny from 192.168.0.1 allow from all

    Директива order указывает серверу Apache в каком порядке рассматривать директивы allow/ deny . В примере директива allow оценивается первой, а затем следует работа с deny . Правило allow from all рассматривается первым (несмотря на то, что в файле оно определено после правила deny) и все IP адреса разрешаются. Затем, если IP адрес клиента соответствует указанному в директиве deny , то доступ ему блокируется. Можно блокировать доступ диапазону IP адресов, указав, например, 192.168 .

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

    RewriteCond %{HTTP_USER_AGENT} ^OrangeSpider RewriteRule ^(.*)$ http://%{REMOTE_ADDR}/$

    В данном примере любой клиент, у которого строка HTTP_USER_AGENT начинается с OrangeSpider (плохой бот), будет перенаправлен по адресу, с которого пришел. Регулярное выражение соответствует любому единичному символу (.) в любых количествах (*) , а для адреса используется переменная %{REMOTE_ADDR} . Флаг l указывает для сервера Apache, что данное правило является последним для клиента и никаких других операций для него выполнять не нужно.

    Указываем для IE режим вывода

    Кроме управления ответами сервера на определенные запросы, мы можем влиять на браузеры пользователей, например, указывать IE определенный механизм вывода. Можно использовать модуль mod_headers, если он присутствует для установки заголовка X-UA-Compatible:

    Header set X-UA-Compatible "IE=Edge"

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

    Header unset X-UA-Compatible

    Включаем кеширование

    Кеширование очень просто устанавливается и делает загрузку вашего сайта быстрее. Устанавливая дату обновления для ресурсов, которые редко изменяются, мы можем предотвратить многократную повторяющуюся загрузку той части содержания, которая остается неизменной.

    Например:

    ExpiresActive on ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType video/ogg "access plus 1 month" ExpiresByType audio/ogg "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/webm "access plus 1 month"

    Вы можете добавлять правила ExpiresByType для любых типов содержания. Директива ExpiresActive on просто включает генерацию заголовка устарения ресурса. Данная директива зависит от наличия модуля mod_expires на сервере Apache.

    Разрешаем сжатие

    Еще одним способом влияния на производительность ресурса является использование сжатия:

    FilterDeclare COMPRESS FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css FilterProvider COMPRESS DEFLATE resp=Content-Type $text/javascript FilterChain COMPRESS FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no

    Данная схема сжатия работает на новых версиях Apache (2.1+) с установленным модулем mod_filter . Он использует алгоритм DEFLATE для сжатия содержания. В примере мы указываем text/html , text/css и text/javascript в качестве типов ресурсов, которые будут сжиматься.

    Определение фильтра начинается с директивы FilterDeclare с опцией COMPRESS . Затем перечисляются типы содержания, на которые будет действовать фильтр. Правило FilterChain указывает серверу построить цепочку на основании списка правил FilterProvider . Директива FilterProtocol позволяет задавать опции, которые используются фильтром при выполнении. Необходимо указать опции change=yes (содержание может изменяться фильтром (в нашем примере - сжиматься)) и byteranges=no (фильтр может использоваться только к полным файлам).

    В старых версиях Apache используется модуль mod_deflate для конфигурирования сжатия DEFLATE. Здесь имеется меньше возможностей для управления фильтром, но правила более простые:

    SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/css text/javascript

    В примере устанавливается алгоритм компрессии с помощью правила SetOutputFilter и определяются типы файлов содержания для фильтра с помощью правила AddOutputFilterByType .

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

    Заключение

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