.htaccess
Что такое mod_rewrite?-mod_rewrite — это модуль для веб-сервера Apache, предназначенный для преобразования URL-ов. Модуль использует в своей работе правила, которые могут быть описаны как в конфигурации сервера (httpd.conf), так и в файлах .htaccess непосредственно в файловой структуре Вашего сайта. Правила описываются в виде регулярных выражений PCRE.
Собственно в каждом файле .htaccess, в самом начале должна быть размещена следующая строка, которая включает этот чудо механизм:
RewriteEngine On
А теперь примеры …
Определяем стартовую страницу
Тут есть два способа. Первый:
DirectoryIndex index.html
второй, для нескольких вариантов
DirectoryIndex index.shtm index.php3 index.php index.htm index.html
Если стартовая не index.php, а например megasaytblin.htm, то добавьте в htaccess эту строку:
DirectoryIndex megasaytblin.htm
Запретить или разрешить листинг файлов (просмотр директории сайта)
Некоторые серверы разрешают просмотр файлов в директории (что не очень хорошо, так как можно получить целый листинг файлов). Но в основном все запрещают. Данные пример показывает как закрыть просмотр директории сайта:
Options All -Indexes
Если нужда заставляет открывать доступ к просмотру директории, то открывается он так:
Options All +Indexes
Кодировка
Данный пример показывает, в какой кодировке сервер будет отдавать документы, т.е. это default кодировка:
AddDefaultCharset windows-1251
А в данном примере мы устанавливаем кодировку на файлы на сервере:
CharsetSourceEnc windows-1251
Закрыть доступ к определенной директории
Ну тут все просто, в файле .htaccess достаточно указать следующую строку:
deny from all
Если хотим закрыть доступ к директории всем, кроме определенного IP, то делаем так:
order allow deny
deny from all
allow from $ip
Если хотим запретить доступ к директории определенному IP адресу, то достаточно сделать так:
order allow deny
deny from all
deny from $ip
Закрыть доступ к определенному файлу / файлам
В данном примере мы блокируем доступ к файлу .htaccess:
<Files .htaccess>
order allow,deny
deny from all
</Files>
Так же есть возможность заблокировать доступ к файлам определенного типа:
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>
Еще один пример блокировки сайта по маске:
<Files "\.(tar|gif|png|...|xml)$">
order allow,deny
deny from all
</Files>
Заблокировать посетителей перешедших с определенного домена
Сделать это можно добавив следующий код в файл:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} plohoysite1.com [NC,OR]
RewriteCond %{HTTP_REFERER} plohoysite2.com [NC,OR]
RewriteRule .* - [F]
</ifModule>
Флаг [NC] указывает что введенные домен не чувствителен к регистру
Флаг [F] указывает серверу выдавать 403 ошибку (Forbidden)
При блокировке нескольких сайтов используйте флаги [NC, OR] При блокировке определенного сайта используйте флаг [NC]
Запретить вставку изображений со сторонних ресурсов
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?site.ru [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
Переадресация с кодом 301
Перенаправить запросы на site.ru с любого из синонимов сайта
RewriteCond %{HTTP_HOST} !^site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
Перенаправить запросы на www.site.ru с любого из синонимов сайта
RewriteCond %{HTTP_HOST} !^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [L,R=301]
Правила касающиеся переадресации лучше всегда размещать в самом начале файла.
Переадресация с http на https
Для нормальной переадресации с небезопасного http на безопасный https достаточно добавить эти строки:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Сжатие файлов
При помощи htaccess можно сжать JavaScript или другие различные типы файлов:
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
Можно сжать все файлы JavaScript, HTML и CSS при помощи 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 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.*
</IfModule>
Можно сжать HTML
AddOutputFilterByType DEFLATE text/html
или любые текстовые файлы:
AddOutputFilterByType DEFLATE text/plain
Кэширование файлов
С htaccess можно кешировать файлы. Напрмер так мы можем «статику» (расширения можно указать любые) на определенное время ( указывать в секундах в переменной max-age) :
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
Так же можно отключить кеширование для динамики:
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
Настройки PHP
Так же при помощи mode_rewrite можно влиять на работу PHP интерпретатора.
Так можно изменить время выполнения скриптов (в секундах):
php_value max_execution_time 240
Так можно изменить размер загружаемых файлов:
php_value upload_max_filesize 20M
Так можно изменить размер передаваемых при загрузке в PHP данных:
php_value post_max_size 15M
Так можно изменить время работы скрипта (или правильнее будет сказать, анализа скриптом исходных данных, в секундах)
php_value max_input_time 200
Обход диалога загрузки
Цитата:
По умолчанию при попытке загрузить файл с веб-сервера отображается диалог, который спрашивает вас, хотите ли вы сохранить файл или открыть его. Этот диалог особенно раздражает при скачивании больших медиа- или PDF-файлов. Если файлы, которые вы загрузили на сервер, предназначены исключительно для скачивания, вы можете облегчить жизнь пользователей, установив загрузку действием по умолчанию. Добавьте в. htaccess следующее:
AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mp3
Обработка ошибок
Пример ниже показывает, как мы можем обрабатывать ошибки на сервере:
ErrorDocument 401 /err/401.html #Требуется авторизация (Authorization Required)
ErrorDocument 403 /err/403.html #Нет доступа (Forbidden)
ErrorDocument 404 /err/404.html #Не найден файл (File not found)
ErrorDocument 500 /err/500.html #Внутренняя ошибк
Что такое mod_rewrite?-mod_rewrite — это модуль для веб-сервера Apache, предназначенный для преобразования URL-ов. Модуль использует в своей работе правила, которые могут быть описаны как в конфигурации сервера (httpd.conf), так и в файлах .htaccess непосредственно в файловой структуре Вашего сайта. Правила описываются в виде регулярных выражений PCRE.
Собственно в каждом файле .htaccess, в самом начале должна быть размещена следующая строка, которая включает этот чудо механизм:
RewriteEngine On
А теперь примеры …
Определяем стартовую страницу
Тут есть два способа. Первый:
DirectoryIndex index.html
второй, для нескольких вариантов
DirectoryIndex index.shtm index.php3 index.php index.htm index.html
Если стартовая не index.php, а например megasaytblin.htm, то добавьте в htaccess эту строку:
DirectoryIndex megasaytblin.htm
Запретить или разрешить листинг файлов (просмотр директории сайта)
Некоторые серверы разрешают просмотр файлов в директории (что не очень хорошо, так как можно получить целый листинг файлов). Но в основном все запрещают. Данные пример показывает как закрыть просмотр директории сайта:
Options All -Indexes
Если нужда заставляет открывать доступ к просмотру директории, то открывается он так:
Options All +Indexes
Кодировка
Данный пример показывает, в какой кодировке сервер будет отдавать документы, т.е. это default кодировка:
AddDefaultCharset windows-1251
А в данном примере мы устанавливаем кодировку на файлы на сервере:
CharsetSourceEnc windows-1251
Закрыть доступ к определенной директории
Ну тут все просто, в файле .htaccess достаточно указать следующую строку:
deny from all
Если хотим закрыть доступ к директории всем, кроме определенного IP, то делаем так:
order allow deny
deny from all
allow from $ip
Если хотим запретить доступ к директории определенному IP адресу, то достаточно сделать так:
order allow deny
deny from all
deny from $ip
Закрыть доступ к определенному файлу / файлам
В данном примере мы блокируем доступ к файлу .htaccess:
<Files .htaccess>
order allow,deny
deny from all
</Files>
Так же есть возможность заблокировать доступ к файлам определенного типа:
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>
Еще один пример блокировки сайта по маске:
<Files "\.(tar|gif|png|...|xml)$">
order allow,deny
deny from all
</Files>
Заблокировать посетителей перешедших с определенного домена
Сделать это можно добавив следующий код в файл:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} plohoysite1.com [NC,OR]
RewriteCond %{HTTP_REFERER} plohoysite2.com [NC,OR]
RewriteRule .* - [F]
</ifModule>
Флаг [NC] указывает что введенные домен не чувствителен к регистру
Флаг [F] указывает серверу выдавать 403 ошибку (Forbidden)
При блокировке нескольких сайтов используйте флаги [NC, OR] При блокировке определенного сайта используйте флаг [NC]
Запретить вставку изображений со сторонних ресурсов
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?site.ru [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
Переадресация с кодом 301
Перенаправить запросы на site.ru с любого из синонимов сайта
RewriteCond %{HTTP_HOST} !^site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
Перенаправить запросы на www.site.ru с любого из синонимов сайта
RewriteCond %{HTTP_HOST} !^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [L,R=301]
Правила касающиеся переадресации лучше всегда размещать в самом начале файла.
Переадресация с http на https
Для нормальной переадресации с небезопасного http на безопасный https достаточно добавить эти строки:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Сжатие файлов
При помощи htaccess можно сжать JavaScript или другие различные типы файлов:
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
Можно сжать все файлы JavaScript, HTML и CSS при помощи 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 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.*
</IfModule>
Можно сжать HTML
AddOutputFilterByType DEFLATE text/html
или любые текстовые файлы:
AddOutputFilterByType DEFLATE text/plain
Кэширование файлов
С htaccess можно кешировать файлы. Напрмер так мы можем «статику» (расширения можно указать любые) на определенное время ( указывать в секундах в переменной max-age) :
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
Так же можно отключить кеширование для динамики:
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
Настройки PHP
Так же при помощи mode_rewrite можно влиять на работу PHP интерпретатора.
Так можно изменить время выполнения скриптов (в секундах):
php_value max_execution_time 240
Так можно изменить размер загружаемых файлов:
php_value upload_max_filesize 20M
Так можно изменить размер передаваемых при загрузке в PHP данных:
php_value post_max_size 15M
Так можно изменить время работы скрипта (или правильнее будет сказать, анализа скриптом исходных данных, в секундах)
php_value max_input_time 200
Обход диалога загрузки
Цитата:
По умолчанию при попытке загрузить файл с веб-сервера отображается диалог, который спрашивает вас, хотите ли вы сохранить файл или открыть его. Этот диалог особенно раздражает при скачивании больших медиа- или PDF-файлов. Если файлы, которые вы загрузили на сервер, предназначены исключительно для скачивания, вы можете облегчить жизнь пользователей, установив загрузку действием по умолчанию. Добавьте в. htaccess следующее:
AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mp3
Обработка ошибок
Пример ниже показывает, как мы можем обрабатывать ошибки на сервере:
ErrorDocument 401 /err/401.html #Требуется авторизация (Authorization Required)
ErrorDocument 403 /err/403.html #Нет доступа (Forbidden)
ErrorDocument 404 /err/404.html #Не найден файл (File not found)
ErrorDocument 500 /err/500.html #Внутренняя ошибк