Главная > Веб мастерская > Идеальный .htaccess (htaccess rewriterule примеры)

Идеальный .htaccess (htaccess rewriterule примеры)

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

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

Итак: htaccess rewriterule примеры, описания.

htaccess как создать? — читаем, копируем код, правим под себя.

htaccess где находится? — в идеале — в каждой папке на сайте (сервере) свой. Но в большинстве случаев — это не нужно, достаточно одного в корневой директории.

htaccess кодировка — в идеале — UTF-8 (все-таки это служебный файл сервера) htaccess utf 8 — верное решение.

htaccess rewriterule примеры:

# REWRITE
 <IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteBase /
 RewriteCond %{HTTP_HOST} ^serg-casper
 RewriteRule (.*) http://www.info-business.pro/$1 [R=301,L]
 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
 RewriteRule ^index.php$ http://www.info-business.pro/ [R=301,L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ index.php [L,QSA]
 </IfModule>

301 редирект htaccess или  htaccess редирект на другой домен (htaccess redirect):

# REDIRICT __________________
 # 301 простой редерикт
 # Redirect 301 /index.html /index.php
 # http://www.info-business.pro - URL На который мы перенаправляем запросы
 # Полезно в случаях когда надо полностью перенаправлять людей с одного сайта на другой.
 # Redirect / http://www.info-business.pro

htaccess запретить доступ к папке: 

нам поможет все тот-же «htaccess deny from all»

<Directory /home/папка>
 Options -Indexes
 order deny,allow
 deny from all
 </Directory>

htaccess доступ по ip:

Если необходимо запретить доступ с определенного IP-адреса — это будет выглядеть так:

Order allow,deny
 allow from all
 Deny from 198.69.132.24

Закрыть доступ ВСЕМ, кроме определенных IP:

Order deny,allow
 deny from all
 # Список IP через пробел, с которых доступ разрешен
 Allow from 194.111.70.48 194.78.47.128

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

# Этот .htaccess поможет сделать ваш сайт быстрей.
# Пользуйтесь на здоровье себе и вашему сайту.
# Сайт: http://www.info-business.pro

# !!!!!!!! При использовании фрагментов кода меняем http://www.info-business.pro на свой адрес сайта, 
# !!!!!!!! а ^serg-casper аналогично на свой домен.

Options All -ExecCGI -Indexes -Includes +FollowSymLinks
#Options -MultiViews

# REWRITE ___________________
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^serg-casper
RewriteRule (.*) http://www.info-business.pro/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ http://www.info-business.pro/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
</IfModule>

# REDIRICT __________________
# 301 простой редерикт
# Redirect 301 /index.html /index.php
# http://www.info-business.pro - URL На который мы перенаправляем запросы
# Полезно в случаях когда надо полностью перенаправлять людей с одного сайта на другой.
# Redirect / http://www.info-business.pro

<IfModule mod_rewrite.c>
# RewriteRule ^news/([^/.]+)/?$ news.php?news=$1 [L]
# RewriteRule ^(.*.((js)|(css)))$ plugin/GzipFile.php?file=$1 [QSA,NE,L]
# RewriteRule .css$ plugin/GzipFile.php?file=$1
# RewriteRule .js$ plugin/GzipFile.php?file=$1
# Круглые скобки () используются для выделения групп символов. В дальнейшем к ним можно обращаться по номеру.
# Символ ^ обозначает начало строки.
# Символ $ обозначает конец строки.
# Символ . обозначает любой символ.
# Символ | обозначает альтернативу. Например, выражения "A|B" означают "A или B".
# Символ ? ставится после символа (группы), который может как присутствовать, так и отсутствовать.
# Символ * ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
# Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
# Квадратные скобки [] используются для перечисления допустимых символов.
# Квадратные скобки [^] используются для перечисления недоступных символов.
# Символ  ставится перед спецсимволами, если они нужны в своем первозданном виде.
# Все, что расположено после символа '#', считается комментарием.
</IfModule>

# RedirectMatch 301 /blog(.*) http://www.info-business.pro/blog$1
# SECURE ____________________
<IfModule mod_ssl.c>
# SSLOptions +StrictRequire
# SSLRequireSSL
# SSLRequire %{HTTP_HOST} eq "iblog.su"
</IfModule>

<IfModule mod_rewrite.c>
# RewriteCond %{HTTPS} !on
# RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
# RewriteCond %{SERVER_PORT} !^443
# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# $n - (0 <= n <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteRule (единственной, следующей сразу за текущим набором директив RewriteCond).
# %n - (1 <= n <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteCond в текущем наборе условий.
# %{NAME_OF_VARIABLE} - где NAME_OF_VARIABLE может быть одной из ниже приведенных переменных
# HTTP_USER_AGENT Содержит информацию о типе и версии браузера и операционной системы посетителя.
# HTTP_REFERER Приводится адрес страницы, с которой посетитель пришёл на данную страницу.
# HTTP_COOKIE Список COOKIE, передаваемых браузером
# HTTP_FORWARDED Страница непосредственно, с которой перешел пользователь
# HTTP_HOST Адрес сервера, например, roocms.com
# HTTP_ACCEPT Описываются предпочтения клиента относительно типа документа.
# REMOTE_ADDR IP-адрес посетителя.
# REMOTE_HOST адрес посетителя в нормальной форме — например, 23.beeline.ru
# REMOTE_IDENT Имя удаленного пользователя. Имеет формат имя.хост, например, starter.www.rutt.net.ru
# REMOTE_USER Тоже, что и REMOTE_IDENT, но содержит только имя. Пример: starter
# REQUEST_METHOD Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к. определяет дальнейший способ обработки информации
# SCRIPT_FILENAME Полный путь к веб-странице на сервере.
# PATH_INFO Содержит в себе все, что передавалось в скрипт.
# QUERY_STRING Содержит строчку, переданную в качестве запроса при вызове CGI скрипта.
# AUTH_TYPE Используется для идентификации пользователя
# DOCUMENT_ROOT Cодержит путь к корневой директории сервера.
# SERVER_ADMIN Почтовый адрес владельца сервера, указанный при установке.
# SERVER_NAME Адрес сервера, типа idea.roocms.com
# SERVER_ADDR IP-адрес вашего сайта.
# SERVER_PORT Порт, на котором работает Apache.
# SERVER_PROTOCOL Версия HTTP протокола.
# SERVER_SOFTWARE Название сервера, например, Apache/1.3.2 (Unix)
# TIME_YEAR TIME_MON TIME_DAY TIME_HOUR TIME_MIN TIME_SEC TIME_WDAY TIME
# Переменные предназначены для работы со временем в разных форматах.
# API_VERSION Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h.
# THE_REQUEST Полная строка HTTP запроса отправленная браузером серверу (т.е., «GET /index.html HTTP/1.1»). Она не включает какие-либо дополнительные заголовки отправляемые браузером.
# REQUEST_URI Ресурс, запрошенный в строке HTTP запроса.
# REQUEST_FILENAME Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу.
# IS_SUBREQ Будет содержать текст «true» если запрос выполняется в текущий момент как подзапрос, «false» в другом случае. Подзапросы могут быть сгенерированы модулями которым нужно иметь дело с дополнительными файлами или URI для того чтобы выполнить собственные задачи.
# Внимание!
# Данная конфигурация файла может порождать побочные запросы к индексному файлу вашего сайта
# в случаях когда в вашей верстке или скриптах содержаться ошибки или ссылки на несуществующие файлы или папки.
# Подобные обращения в большом числе могут вызвать нагрузку на ваш веб сервер. 1 ошибка = 1 лишнему обращению.
# Будьте внимательны. Перед использованием данного файла проверьте файлы access.log и error.log сгенерированные вашим Apache сервером.
# Если вы обнуружите ошибки в ваших скриптах, исправьте их перед использованием на "боевом сервере"
# Блокировать любой запрос, пытающийся испортить base64_encode через URL
RewriteCond %{QUERY_STRING} base64_encode[^(]*([^)]*) [OR]
# Блокировать любой запрос, содержащий тег <script> в URL
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Блокировать любой запрос, пытающийся установить значение глобальных переменных PHP через URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# Блокировать любой запрос, пытающийся изменить _REQUEST переменную через URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
# Перенаправлять заблокированные запросы
RewriteRule .* index.php [F]
# и запрошенный путь не соответствует пути к физическому файлу
RewriteCond %{REQUEST_FILENAME} !-f
# и запрошенный путь не соответствует пути к физической папке
RewriteCond %{REQUEST_FILENAME} !-d
# то перенаправить запрос на скрипт index.php
RewriteRule .* index.php [L]
RedirectMatch 301 regexp /error410.html
</IfModule>

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

# HANDLER ___________________
AddHandler application/x-httpd-php .html
AddHandler cgi-script .pl .py .jsp .asp .htm .shtml .sh .cgi
AddType application/x-javascript .js
AddType application/json .json
AddType text/css .css
AddType text/xml .xml
# Audio
AddType audio/ogg .oga .ogg
AddType audio/mp4 .m4a .f4a .f4b
# Video
AddType video/ogg .ogv
AddType video/mp4 .mp4 .m4v .f4v .f4p
AddType video/webm .webm
AddType video/x-flv .flv
# SVG
AddType image/svg+xml .svg .svgz
AddEncoding gzip .svgz
# Webfonts
AddType application/vnd.ms-fontobject .eot
AddType application/x-font-ttf .ttf .ttc
AddType font/opentype .otf
AddType application/x-font-woff .woff
# Assorted types
AddType image/x-icon .ico
AddType image/webp .webp
AddType text/cache-manifest .appcache .manifest
AddType text/x-component .htc
AddType application/xml .rss .atom .xml .rdf
AddType application/x-chrome-extension .crx
AddType application/x-opera-extension .oex
AddType application/x-xpinstall .xpi
AddType application/octet-stream .safariextz
AddType application/x-web-app-manifest+json .webapp
AddType text/x-vcard .vcf
AddType application/x-shockwave-flash .swf
AddType text/vtt .vtt
AddType application/octet-stream .doc .mov .avi .pdf .xls .rar .zip .mp3 .wmv .ppt .tar .gz .docx .xlsx
# ForceType application/x-httpd-php
# INDEX FILE ________________
DirectoryIndex index.php
# 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_include mime ^application/x-font-woff.*
mod_gzip_item_exclude mime ^image.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
<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 application/x-font-woff image/jpg image/jpeg
</ifModule>
# PHP _______________________
php_value	upload_max_filesize 32M
php_value	post_max_size 10M
php_value	default_charset utf-8
php_flag	magic_quotes_gpc Off
php_flag	register_globals Off
php_flag	short_open_tag On
# php_value max_input_time 200
# php_value session.name sid
php_value	error_reporting 0
php_flag	display_startup_errors off
php_flag	display_errors off
php_flag	html_errors off
php_flag	log_errors off
php_flag	ignore_repeated_errors on
php_flag	ignore_repeated_source on
# php_value log_errors_max_len 1024
php_flag	report_memleaks off
php_flag	track_errors off
php_value	docref_root 0
php_value	docref_ext 0
# php_value error_log /tmp/php_error.log
# php_value error_prepend_string " "
# php_value error_append_string " "
<Files php_error.log>
Order allow,deny
Deny from all
Satisfy All
</Files>
<IfModule php5_module>
# php_value session.cookie_httponly true
</IfModule>
# XDEBUG ___________________
# Настройки для расширения XDebug
#php_flag xdebug.profiler_enable On
#php_flag xdebug.extended_info On
#php_flag xdebug.remote_enable off
#php_flag xdebug.auto_trace off
# OTHER SETTINGS ____________
<IfModule mod_setenvif.c>
SetEnv TZ Europe/Moscow
</IfModule>
ServerSignature Off
# AddDefaultCharset UTF-8
# AddCharset utf-8 .atom .css .js .json .rss .vtt .xml
# CACHE AND Headers _________
<ifModule mod_headers.c>
<FilesMatch ".(html|htm)$">
Header set Cache-Control "max-age=43200"
</FilesMatch>
<FilesMatch ".(js|css|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
<FilesMatch ".(flv|swf|ico|gif|jpg|jpeg|png|jpe?g)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
<FilesMatch ".(ttf|ttc|otf|eot|woff|font.css)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
<FilesMatch ".(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" >
Header unset X-UA-Compatible
</FilesMatch>
</IfModule>
<ifModule mod_expires.c>
ExpiresActive On
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 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 application/x-shockwave-flash "access plus 2592000 seconds"
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"
ExpiresByType text/html "access plus 43200 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
ExpiresByType text/xml "access plus 600 seconds"
ExpiresByType application/xml "access plus 600 seconds"
ExpiresByType application/json "access plus 600 seconds"
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType text/x-component "access plus 1 week"
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
</ifModule>
# Bad Rquest
ErrorDocument 400 /index.php?page=e400
# Authorization Required
ErrorDocument 401 /index.php?page=e401
# Forbidden
ErrorDocument 403 /index.php?page=e403
# Not found
ErrorDocument 404 /index.php?page=e404
# Method Not Allowed
ErrorDocument 405 /index.php?page=e405
# Request Timed Out
ErrorDocument 408 /index.php?page=e408
# Request URI Too Long
ErrorDocument 414 /index.php?page=notfound
# Internal Server Erro
ErrorDocument 500 /index.php?page=notfound
# Not Implemented
ErrorDocument 501 /index.php?page=notfound
# Bad Gateway
ErrorDocument 502 /index.php?page=notfound
# Service Unavailable
ErrorDocument 503 /index.php?page=notfound
# Gateway Timeout
ErrorDocument 504 /index.php?page=notfound

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

P.S. Автор кода: alex Roosso, спасибо ему. >> http://habrahabr.ru/post/154643/

NEW!!! Полезное, нужное, важное:

Где заработать в интернете деньги? Надёжно, честно, без обмана!
Платежные системы, кошельки и обменники для работы

Лучшие хостинги, сервера и прочее для сайтов

Смотрите также

Продвижение молодого сайта

Основная трудность — это недостаток времени существования сайта — и не фига не сделаешь с этим фактом. И именно по этому продвижение молодого сайта отличается от периодической раскрутки старого, трастового ресурса.

2 комментария

  1. Добрый вечер. Пытаюсь сделать тупейшую штуку — не работает.
    У меня приложение запрашивает файлы в формате .wav а на сайте лежит .gsm

    Казалось бы, пишем строку и вуаля.
    RewriteRule ^(.+)\.gsm $1.wav [L]

    Но нет, не отрабатывает такой редирект.
    В чем может быть ошибка?

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

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