Хитрости и примеры использования .htaccess
Оглавление:
Доступ к сайту
Присвоить определенный тип файла (независимо от названия или расширения)
Дружественные SEO перенаправления для удаленных/перемещенных ссылок и страниц
Обязательное использование префикса: www
Обязательное использование префикса: www (без обработки скриптами)
Требовать не субдомен
Перенаправление запросов с любых IP за исключением одного
Установка временной зоны сервера
Установка е-mail администратора Добавление языкового тега
Использование собственного php.ini с mod_php или php как cgi
Разрешить только GET и PUT методы запросов на сервере
Пропустить все файлы gif через cgi скрипт (обработать)
Обработать запрос в зависимости от метода запроса
Добавить типы файлов не отображающихся в браузере
Разрешить показывать код в браузере
Ускорение работы сайта при помощи кэширования Идентификация пользователей Использование посетителем зависимых переменных окружения
Разрешить вход на apache.org и запретить на foo.apache.org
Разрешить с определенного IP вход без запроса пароля, а с других IP требовать пароль
Блокировать доступ к файлам в определенное время суток
Базовый шаблон .htaccess
Доступ к сайту
Даем доступ ко всему сайту (24.205.23.222) роботу Google без пароля, а всем пользователям с браузерами только по паролю. Также доступна будет валидация XHTML и CSS.
# ELITE HTACCESS FOR WEBDEVELOPERS
##############################################
AuthName
"SiteName Administration"
AuthUserFile
/home/sitename.com/.htpasswd
AuthType
basic
Require
valid-user
Order
deny,allow
Deny
from all
Allow
from 24\.205\.23\.222
Allow
from w3.org htmlhelp.com
Allow
from googlebot.com
Satisfy
Any
ПРИМ: Любое правило . htaccess rewrite должно начинаться со следующих строк:
Options
+FollowSymLinks
RewriteEngine
On
RewriteBase
/
Присвоить определенный тип файла (независимо от названия или расширения)
#Makes image.gif, blah.html, index.cgi all act as php
ForceType
application/x-httpd-php
Дружественные SEO перенаправления для удаленных/перемещенных ссылок и страниц.
Для единичного файла
Redirect
301 /d/file.html http://www.htaccesselite.com/r/file.html
Для нескольких файлов например: blog/this.php?gh
RedirectMatch
301 /blog(.*) http://www.askapache.com/$1
Переадресация на другой домен
Redirect
301 / http://www.newdomain.com
Обязательное использование префикса: www
Options
+FollowSymLinks
RewriteEngine
On
RewriteBase
/
RewriteCond
% !^/robots\.txt$
RewriteCond
% !^www\.example\.com$ [NC]
RewriteRule
^(.*)$ http://www.example.com/$1 [R=301,L]
Обязательное использование префикса: www (без обработки скриптами)
Options
+FollowSymLinks
RewriteEngine
On
RewriteBase
/
RewriteCond
% !^/robots\.txt$ [NC]
RewriteCond
% !^www\.[a-z-]+\.[a-z] [NC]
RewriteCond
% ([a-z-]+\.[a-z] )$ [NC]
RewriteRule
^/(.*)$ http://%1/$1 [R=301,L]
Требовать не субдомен
Options
+FollowSymLinks
RewriteEngine
On
RewriteBase
/
RewriteCond
% !^/robots\.txt$
RewriteCond
% \.([a-z-]+\.[a-z] )$ [NC]
RewriteRule
^/(.*)$ http://%1/$1 [R=301,L]
Перенаправление запросов с любых IP за исключением одного (полезно для веб-разработки)
ErrorDocument
403 http://www.someothersite.com
Order deny,allow
Deny
from all
Allow
from 24.33.65.6
Установка временной зоны сервера:
SetEnv
TZ America/Indianapolis
Установка е-mail администратора:
SetEnv
SERVER_ADMIN webmaste@htaccesselite.com
Добавление языкового тега «en-US» (или «ru-RU») и заголовка»text/html; UTF-8″ без использования метатегов
AddDefaultCharset
UTF-8
# Or AddType 'text/html; charset=UTF-8' html
DefaultLanguage
en-US
Используя «Files Directive»
<Files ~ "\.(htm|html|css|js|php)$">
AddDefaultCharset
UTF-8
DefaultLanguage
en-US
</Files>
Используя «FilesMatch Directive» (предпочтительнее)
<FilesMatch "\.(htm|html|css|js|php)$">
AddDefaultCharset
UTF-8
DefaultLanguage
en-US
</FilesMatch>
Использование собственного php.ini с mod_php или php как cgi
Типичный пример
AddHandler
cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options
-ExecCGI
Все перечисленные файлы (расширения) попадают на обработчик -ExecCGI, и автоматически выключают -FollowSymLinks (и как обратный пример, +ExecCGI также включает +FollowSymLinks)
Разрешить только GET и PUT методы запросов на сервере.
Options
-ExecCGI -Indexes -All +FollowSymLinks
RewriteEngine
On
RewriteBase
/
RewriteCond
% !^(GET|PUT)
RewriteRule
.* - [F]
Пропустить все файлы gif через cgi скрипт (обработать)
Action
image/gif /cgi-bin/filter.cgi
Обработать запрос в зависимости от метода запроса
Script
PUT /cgi-bin/upload.cgi
Добавить типы файлов не отображающихся в браузере
AddType
application/octet-stream .avi
AddType
application/octet-stream .mpg
И тогда Ваша HTML ссылка будет выглядить так:
<a href="http://www.askapache.com/movies/mov1.avi">Download Movie1</a>
Клиент получит всплывающее окно с запросом Открыть или Сохранить файл.
Разрешить показывать код в браузере
Например Вы хотите чтобы сервер не обрабатывал файлы типа .pl, .py, или .cgi, а отображал их в браузере как текстовый файл.
RemoveHandler
cgi-script .pl .py .cgi
Ускорение работы сайта при помощи кэширования
# MONTH
<FilesMatch "\.(flv|gif|jpg|jpeg|png|ico|swf)$">
Header
set Cache-Control "max-age=2592000"
</FilesMatch>
# WEEK
<FilesMatch "\.(js|css|pdf|txt)$">
Header
set Cache-Control "max-age=604800"
</FilesMatch>
# DAY
<FilesMatch "\.(html|htm)$">
Header
set Cache-Control "max-age=43200"
</FilesMatch>
Защитить контент (картинки, файлы и т.п.) от кражи
Options
+FollowSymLinks
RewriteEngine
On
RewriteBase
/
RewriteCond
% !^$
RewriteCond
% !^http://(www\.)?askapache.com/.*$ [NC]
RewriteRule
\.(gif|jpg|swf|flv|png)$ http://www.askapache.com/feed.gif [R=302,L]
Обработка ошибок HTTP
ErrorDocument
404 /favicon.ico
ErrorDocument
403
https://secure.htaccesselite.com
ErrorDocument 404 /cgi-bin/error.php
ErrorDocument 400 /cgi-bin/error.php
ErrorDocument 401 /cgi-bin/error.php
ErrorDocument 403 /cgi-bin/error.php
ErrorDocument 405 /cgi-bin/error.php
ErrorDocument 406 /cgi-bin/error.php
ErrorDocument 409 /cgi-bin/error.php
ErrorDocument 413 /cgi-bin/error.php
ErrorDocument 414 /cgi-bin/error.php
ErrorDocument 500 /cgi-bin/error.php
ErrorDocument
501 /cgi-bin/error.php
Идентификация пользователей
Защита паролем 1-го файла:
<Files login.php>
AuthName
"Prompt"
AuthType
Basic
AuthUserFile
/home/askapache.com/.htpasswd
Require
valid-user
</Files>
Защита нескольких файлов:
<FilesMatch "^(exec|env|doit|phpinfo|w)\.*$">
AuthName
"Development"
AuthUserFile
/.htpasswd
AuthType
basic
Require
valid-user
</FilesMatch>
Пример использования разрешающей директивы — Allow Directive:
# A (partial) domain-name
Allow
from 10.1.0.0/255.255.0.0
# Full IP address
Allow
from 10.1.2.3
# More than 1 full IP address
Allow
from 192.168.1.104 192.168.1.205
# Partial IP addresses
# first 1 to 3 bytes of IP, for subnet restriction.
Allow
from 10.1
Allow
from 10 172.20 192.168.2
# network/netmask pair
Allow
from 10.1.0.0/255.255.0.0
# network/nnn CIDR specification
Allow
from 10.1.0.0/16
# IPv6 addresses and subnets
Allow
from 2001:db8::a00:20ff:fea7:ccea
Allow
from 2001:db8::a00:20ff:fea7:ccea/10
Использование посетителем зависимых переменных окружения:
SetEnvIf
User-Agent ^KnockKnock/2\.0 let_me_in
Order
Deny,Allow
Deny
from all
Allow
from env=let_me_in
Разрешить вход на apache.org и запретить на foo.apache.org
Order
Allow,Deny
Allow
from apache.org
Deny
from foo.apache.org
Разрешить с определенного IP вход без запроса пароля, а с других IP требовать пароль:
AuthUserFile
/home/www/site1-passwd
AuthType
Basic
AuthName
MySite
Require
valid-user
Allow
from 172.17.10
Satisfy
Any
Блокировать доступ к файлам в определенное время суток
Options
+FollowSymLinks
RewriteEngine
On
RewriteBase
/
# If the hour is 16 (4 PM) Then deny all access
RewriteCond
% ^16$
RewriteRule
^.*$ - [F,L]
Базовый шаблон .htaccess
Включает все директивы с комментариями, ненужное можно закомментировать символом #.
# DEFAULT SETTINGS
##############################################
Options
+ExecCGI -Indexes
DirectoryIndex
index.php index.html index.htm
### DEFAULTS ###
ServerSignature
Off
AddType
video/x-flv .flv
AddType
application/x-shockwave-flash .swf
AddType
image/x-icon .ico
AddDefaultCharset
UTF-8
DefaultLanguage
en-US
SetEnv
TZ America/Indianapolis
SetEnv
SERVER_ADMIN webmaster@askapache.com
### FAST-CGI ###
AddHandler
fastcgi-script fcgi
AddHandler
php-cgi .php
Action
php-cgi /cgi-bin/php5-wrapper.fcgi
# HEADERS and CACHING
##############################################
#### CACHING ####
# YEAR
<FilesMatch "\.(flv|gif|jpg|jpeg|png|ico)$">
Header
set Cache-Control "max-age=2592000"
</FilesMatch>
# WEEK
<FilesMatch "\.(js|css|pdf|swf)$">
Header
set Cache-Control "max-age=604800"
</FilesMatch>
# 10 minutes
<FilesMatch "\.(html|htm|txt)$">
Header
set Cache-Control "max-age=600"
</FilesMatch>
# DONT CACHE
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header
unset Cache-Control
</FilesMatch>
# REWRITES AND REDIRECTS
##############################################
### SEO REDIRECTS ###
Redirect
301 /2006/uncategorized/htaccesselitecom-aboutus.html http://www.^^SITE^^.^^TLD^^
### REWRITES ###
RewriteEngine
On
RewriteBase
/
### WORDPRESS ###
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine
On
RewriteBase
/
RewriteCond
% !-f
RewriteCond
% !-d
RewriteRule
. /index.php [L]
</IfModule>
# END WordPress
# AUTHENTICATION
##############################################
AuthName
"askapache.com"
Require
valid-user
AuthUserFile
/askapache/.htpasswd
AuthType
basic