.htaccess (с точкой в начале имени) - это файл-конфигуратор Apache-серверов, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу (apache/conf/httpd.conf). Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок. .htaccess представляет собой обычный текстовый документ, расширение которого htaccess. Данный файл обычно находится в корне сайта, однако Вы можете создавать и дополнительные .htaccess-файлы для различных директорий Вашего сайта.
Mod_rewrite - модуль, используемый веб-серверами для преобразования URL'ов.
Если вы хотите вести логи всех операций, выполненных с помощью mod_rewrite, можно активировать это с помощью следующей записи в httpd.conf:
RewriteLog /usr/local/apache/logs/mod_rewrite.logRewriteLogLevel 1Наиболее часто используемые параметры
%{REQUEST_URI} Строка запроса (без доменного имени, и GET параметров), пример "/server/htaccess/"
%{HTTP_HOST} Доменное имя, например "max22.ru"
%{QUERY_STRING} Строка GET параметров
Redirect 301 / http://www.domainname.ru/redirect /secret http://www.site.ru/nosecret# с использованием регулярного выраженияRedirectMatch 301 .* http://www.site.ru/?from=htmlweb.ruSetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir"RewriteCond %{REDIR} redirRewriteRule ^/$ /user.phpRewriteEngine OnRewriteRule !.(gif|jpg)$ index.phpOptions +FollowSymLinksRewriteEngine onRewriteCond %{HTTP_HOST} ^yourdomain\.ruRewriteRule ^(.*)$ http://www.yourdomain.ru/$1 [R=permanent,L]RedirectMatch 301 (.*) http://www.yourdomain.ru$1 Прописывается в файле .htaccess.RedirectMatch 301 (.*)\.html$ http://www.yourdomain.ru$1.phpRedirectMatch Permanent ^/html/resources.html$ http://www.newdomain.com/resources.phpRedirectMatch Permanent ^/html/other_page.html$ http://www.newdomain.com/other_page.phpRedirectMatch Permanent ^/(.*)$ http://www.newdomain.com/RewriteEngine onRewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L]RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2header("HTTP/1.1 301 Moved Permanently"); header("Location: http://www.newdomain.ru/newdir/newpage.htm"); exit();RewriteRule ^superdiscount(.*)$ /hot-offers.php [L,R=301]RewriteRule ^superdiscount/my-ebook.html /hot-to-make-million.html [L,R=301]RewriteRule ^superdiscount(.*)$ /hot-offers.php [L,R=301]RewriteRule ^article.jsp?id=(.*)$ /latestnews.htm [L,R=301]RewriteRule ^/product-(.*)_([0-9]+).php /redirectold.php?productid=$2<?phpfunction getRedirectUrl($productid) {// Connect to the database$dServer = "localhost";$dDb = "mydbname";$dUser = "mydb_user";$dPass = "password";$s = @mysql_connect($dServer, $dUser, $dPass)or die("Couldn't connect to database server");@mysql_select_db($dDb, $s)or die("Couldn't connect to database");$query = "SELECT new_url FROM redirects WHERE old_id = ". $productid;mysql_query($query);$result = mysql_query($query);$hasRecords = mysql_num_rows($result) == 0 ? false : true;if (!$hasRecords) {$ret = 'http://www.yoursite.com/';} else {while($row = mysql_fetch_array($result)){$ret = 'http://www.yoursite.com/'. $row["new_url"];}}mysql_close($s);return $ret;}$productid = $_GET["productid"];$url = getRedirectUrl($productid);header("HTTP/1.1 301 Moved Permanently");header("Location: $url");exit();?> RewriteEngine on RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700 RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900 RewriteRule ^foo\.html$ foo.day.html RewriteRule ^foo\.html$ foo.night.htmlRewriteEngine on # оглашаем, что хотим использовать mod_rewriteRewriteCond %{HTTP_HOST} ^www\.(.*) [NC]RewriteRule ^/?(.*) http://%1/$1 [L,R=permanent]RewriteCond %{THE_REQUEST} ^.*/index.phpRewriteRule ^(.*)index.php$ http://%{HTTP_HOST}/$1 [R=301,L]AddHandler application/x-httpd-php .htmlAddHandler application/x-httpd-php .xmlAddHandler application/x-httpd-php .aspdeny from all<Files secret.php>deny from all</Files>order deny,allowdeny from allallow from 192.152.37.125<Limit GET POST PUT> order allow,deny allow from all deny from 192.152.37.125 deny from 123.456.177</LIMIT>Options -Indexes<Files ~ "\.(inc|conf|cfg)$"> deny from all</Files>RewriteRule ^.htaccess$ - [F]Определение кодировки, в которой сервер "отдает" файлы
AddDefaultCharset windows-1251варианты: KOI8-R, UTF-8, Windows-1251
Определение кодировки на загружаемые файлы
CharsetSourceEnc windows-1251Для установки пароля на директорию можно воспользоваться системой базовой авторизации, предусмотренной в веб-сервере Apache. Создаем в каталоге, к которому хотим ограничить доступ по паролю, файл .htaccess с такими директивами:
AuthType BasicAuthName "Some Name"AuthUserFile /www/some_login/www/htdocs/some_dir/.htpasswdrequire valid-userПуть /www/some_login/www/htdocs/some_dir/.htpasswd обозначает полный путь к файлу паролей на диске нашего сервера. Если, например, вы поместите файл .htpasswd (в нем будут пароли) в домашний каталог, куда вы попадаете, зайдя на сервер по FTP, то путь к этому файлу будет иметь вид /www/some_login/www/htdocs/some_dir/.htpasswd, где some_login - Ваш логин. В директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями, который мы создадим чуть позже. Если вы создаете файл .htaccess на своем компьютере, а не сразу на сервере используя текстовый редактор, обратите особое внимание на то, что .htaccess должен передаваться по FTP строго в текстовом (ASCII) режиме.
Создаем файл паролей. Файл с паролями должен содержать строки вида login:password. Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл - воспользоваться программой, входящей в поставку Apache - htpasswd (на нашем сервере она находится в каталоге /usr/local/apache/bin, полный путь - /usr/local/apache/bin/htpasswd).
Рассмотрим, как создать файл паролей в unix shell прямо на сервере. Зайдем в shell и будем выполнять следующие команды:
htpasswd -mbc .htpasswd user1 7B1safkir- создаем новый файл .htpasswd, в который добавляем запись для пользователя user1 с паролем, указанным в командной строке.
htpasswd .htpasswd user2- добавляем в уже существующий файл .htpasswd пользователя user2, а пароль вводим вручную в ответ на соответствующий запрос программы.
После окончания заведения всех логинов файл нужно загрузить на сервер.
О других способах установки паролей на страницу
Задать собственную страницу ошибок можно следующим образом:
ErrorDocument 404 http://www.site.ru/404.phpIE игнорирует страницы размером меньше 512 байт.
Чтобы избежать индексации поисковыми системами директорий и поддиректорий, необходимо прописать такую строку, к примеру:
DirectoryIndex index.phpЭта директива задает файл, который будет вызван при обращении к директории без указания имени файла.
Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.
DirectoryIndex index.html index.php index.shtmlЛично я предпочитаю переадресовывать с пустых директорий либо на главную страницу сайта, либо на какую-либо другую подходящую страницу. Например, директорию www.site.ru/pic/ можно переадресовать на www.site.ru.
Очень часто бывает, что веб-мастера нагло копируют контент с Вашего сайта вместе с рисунками, причем рисунки подгружаются с Вашего же сервера. Это создает лишний трафик, что, зачастую, приводит к ряду проблем. Как же защититься от таких веб-мастеров и не помешать поисковым роботам индексировать изображения? Все просто:
RewriteEngine onRewriteCond %{HTTP_REFERER} .RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)?site\. [NC]RewriteCond %{HTTP_REFERER} !google\. [NC]RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]RewriteCond %{HTTP_REFERER} !msn\. [NC]RewriteCond %{HTTP_REFERER} !yahoo\. [NC]RewriteCond %{REQUEST_URI} !^/hotlinker\.gif$RewriteRule \.(gif|jpg|png)$ /hotlinker.gif [NC,L]hotlinker.gif - изображение, которое будет отображаться, вместо истинных изображений. Рекомендую в этом изображении отобразить Ваш логотип и ссылку на Ваш сайт.
Еще один варинат запрета доступа к картинкам с неразрешенных сайтов:
SetEnvIfNoCase Referer "^$" local_ref=1SetEnvIfNoCase Referer "^http://(www\.)?htmlweb\.ru" local_ref=1SetEnvIfNoCase Referer "^http://(www\.)?images\.yandex\.ru" local_ref=1SetEnvIfNoCase Referer "^http://(www\.)?hghltd\.yandex\.com" local_ref=1<FilesMatch ".(jpg|gif|png)"> Order Allow,Deny Allow from env=local_ref</FilesMatch>Поисковые машини и разного рода сканеры создают коллосальный трафик на вашем сайте. Нижеприведенный блок кода позволит запретить доступ ботам на сайт.
RewriteCond %{HTTP_USER_AGENT} (Googlebot|Slurp|spider|Twiceler|heritrix| Combine|appie|boitho|e-SocietyRobot|Exabot|Nutch|OmniExplorer| MJ12bot|ZyBorg/1|Ask\ Jeeves|AskJeeves|ActiveTouristBot| JemmaTheTourist| agadine3|BecomeBot|Clustered-Search-Bot| MSIECrawler|freefind|galaxy|genieknows|INGRID|grub-client| MojeekBot|NaverBot|NetNose-Crawler|OnetSzukaj|PrassoSunner| Asterias\ Crawler|T-H-U-N-D-E-R-S-T-O-N-E|GeorgeTheTouristBot| VoilaBot|Vagabondo|fantomBro wser|stealthBrowser|cloakBrowser| fantomCrew\ Browser|Girafabot|Indy\ Library|Intelliseek|Zealbot| Windows\ 95|^Mozilla/4\.05\ \[en\]$|^Mozilla/4\.0$) [NC]RewriteRule ^(.*)$ - [F]#RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* [NC,OR]RewriteCond %{HTTP_USER_AGENT} ^Opera.* [NC,OR]RewriteCond %{HTTP_USER_AGENT} ^Firefox.* [NC,OR]RewriteCond %{HTTP_USER_AGENT} ^Netscape.* [NC]RewriteRule ^(.*)$ - [L]RewriteRule ^(.*)$ - [F]Чтобы иметь больше информации о посещении поисковиков, полезно иметь подробную информацио об обращении к файлу robots.txt Для того, чтобы оганизовать это, в '.htaccess' должны быть следующие записи:
RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteRule ^robots.txt$ /robot.php?%{REQUEST_URI}Теперь при запросе файла 'robots.txt' наш RewriteRule переадресует посетителя (робота) к обрабатывающему запросы скрипту robot.php. Кроме того, переменная передается скрипту, которая будет обработана в соответствии с вашими нуждами. 'REQUEST_URI' определяет имя запрашиваемого файла. В данном примере это - 'robots.txt'. Скрипт прочтет содержание 'robots.txt' и отправит его web-браузеру или роботу поискового сервера. Таким образом, мы можем считать хиты посетителей и вести лог-файлы.
Для отключения добавления PHPSESSID к URL вставьте в начало index.php:
ini_set("session.use_trans_sid", 0);Либо в .htaccess пропишите:
php_flag session.use_trans_sid OffЕсли вам все это показалось сложным, воспользуйтесь готовым сервисом преобразования динамических URL в статические с помощью htaccess
Кэширование для всех типов файлов по времени доступа
ExpiresActive onExpiresDefault "access plus 600 seconds"Кэширование для всех типов файлов по времени изменения
ExpiresActive onExpiresDefault "modification plus 600 seconds"Кэширование для определённых типов файлов
ExpiresByType text/css "modification plus 600 seconds"ExpiresByType image/jpeg "modification plus 600 seconds"ExpiresByType image/gif "modification plus 600 seconds"ExpiresByType image/x-ico "modification plus 600 seconds"ExpiresByType image/png "modification plus 600 seconds"Откройте файл конфигурации сервера Apache httpd.conf и раскомментируйте следующие строчки:
LoadModule expires_module modules/mod_expires.soLoadModule headers_module modules/mod_headers.so...AddModule mod_expires.cAddModule mod_headers.cВпишите в .htaccess следующее:
# Запрещение кеширования в этой папке# Необходимо включение модулей# mod_headers.c и mod_expires.c## Заголовок Cache-Control<IfModule mod_headers.c>Header append Cache-Control "no-store, no-cache, must-revalidate"</IfModule># Заголовок Expires<IfModule mod_expires.c>ExpiresActive OnExpiresDefault "now"</IfModule>Необходимые заголовки будут передаваться автоматически, и специально их писать в PHP уже не нужно - кэш уже выключен!
Описание http-заголовка кеширования Cache-control
# Разрешение кеширования в этой папке# Необходимо включение модулей# mod_headers.c и mod_expires.c#<IfModule mod_expires.c>ExpiresActive on#ExpiresDefault "access plus 1 hours"#ExpiresDefault "access plus 10 years"ExpiresDefault "access plus 1 month"ExpiresByType text/cache-manifest "access plus 0 seconds"ExpiresByType text/html "access plus 0 seconds"ExpiresByType text/xml "access plus 0 seconds"ExpiresByType application/xml "access plus 0 seconds"ExpiresByType application/json "access plus 0 seconds"ExpiresByType application/rss+xml "access plus 1 month"ExpiresByType image/x-icon "access plus 1 week"ExpiresByType image/gif "access plus 1 year"ExpiresByType image/png "access plus 1 year"ExpiresByType image/jpg "access plus 1 year"ExpiresByType image/jpeg "access plus 1 year"ExpiresByType video/ogg "access plus 1 year"ExpiresByType audio/ogg "access plus 1 year"ExpiresByType audio/mp3 "access plus 1 year"ExpiresByType video/mp4 "access plus 1 year"ExpiresByType video/webm "access plus 1 year"ExpiresByType text/x-component "access plus 1 month"ExpiresByType font/truetype "access plus 1 year"ExpiresByType font/opentype "access plus 1 year"ExpiresByType application/x-font-woff "access plus 1 year"ExpiresByType image/svg+xml "access plus 1 month"ExpiresByType application/vnd.ms-fontobject "access plus 1 year"ExpiresByType text/css "access plus 2 months"ExpiresByType application/javascript "access plus 2 months"ExpiresByType text/javascript "access plus 2 months"<IfModule mod_headers.c>Header append Cache-Control "public"</IfModule></IfModule><FilesMatch .*\.js$> ExpiresDefault "access plus 3 days"</FilesMatch>Будьте осторожны при кешировании, т.к. при изменении файла, пользователь может получить новый вариант только через 3 дня!
Пропишите в своем файле .htaccess следующие строки:
RemoveHandler .php .htm .htmlAddHandler application/x-httpd-php .php .htm .htmlЧтобы разместить два или более сайтов на одном виртуальном хостинге, вопреки отведенному вам тарифным планом количеству доменов необходимо в файле ".htaccess" прописать следующие строки:
RewriteEngine OnRewriteRule ^newdirectory/ - [L]RewriteCond %{HTTP_HOST} (www.)?newdomain.ru [NC]RewriteRule (.*) newdirectory/$1 [L]Где:
newdirectory/ - папка, в которой будет лежать второй сайт
newdomain.ru - домен, для которого мы делаем перенаправление
Обратите внимание, что при этом у Вас будет единый почтовый аккаунт. Т.е. если, у Вас существует ящик admin@domain.ru, то после подключения домена newdomain.ru у ящика admin@domain.ru появляется второе имя - admin@newdomain.ru. А при создании любого нового ящика (например info), ему автоматически присваиваются два имени - info@domain.ru и info@newdomain.ru.
Иногда необходимо позволить веб-серверу искать страницы больше чем в одном каталоге.
RewriteEngine on# во-первых попытаемся найти это в указанном месте/...# ...и если нашли то заканчиваем поиск:RewriteCond /your/docroot/dir1/%{REQUEST_FILENAME} -fRewriteRule ^(.+) /your/docroot/dir1/$1 [L]# во-вторых - попытаемся найти это в pub/...# ...и если нашли то заканчиваем поиск:RewriteCond /your/docroot/dir2/%{REQUEST_FILENAME} -fRewriteRule ^(.+) /your/docroot/dir2/$1 [L]# иначе продолжаем для других директивRewriteRule ^(.+) - [PT]Если Вы хотите предоставлять адреса www.subdomain.domain.ru для страниц пользователей, Вы можете использовать следующий набор правил для преобразования http://www.subdomain.domain.ru/path во внутренний путь /home/subdomain/path:
RewriteEngine onRewriteCond %{HTTP_HOST} ^www\.[^.]+\.ru$RewriteRule ^(.+) %{HTTP_HOST}$1 [C]RewriteRule ^www\.([^.]+)\.ru(.*) /home/$1$2Если при передаче файлов через формы (при указанном enctype="multipart/form-data") бинарные данные повреждаются, пропишите в /cgi-bin/.htaccess директиву:
CharsetRecodeMultipartForms Off.Такое может происходить из-за установленного модуля <mod_security> в Apache. По умолчанию он блокирует в запросах строки с SQL аргументами и другими потенциально опасными командами.
Возможные сообщения об ошибке:
Forbidden
You don't have permission to access /adm/index.php on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
или
Запрос небезопасен и был отвергнут.
Добавьте в .htaccess
<IfModule mod_security.c> SecFilterEngine Off SecFilterScanPOST Off</IfModule>Для сообщения:
"POST /wp-admin/async-upload.php HTTP/1.1" 406 354 "-" "Shockwave Flash"
можно снять защиту только на загрузку файлов на сервер:
<IfModule mod_security.c><Files async-upload.php>SecFilterEngine OffSecFilterScanPOST Off</Files></IfModule>Оптимально снимать защиту только с той папки, в которой это необходимо, не убирая защиту со всего сайта.
Это переменные вида %{NAME_OF_VARIABLE}
где NAME_OF_VARIABLE может быть строкой взятой из следующего списка:
HTTP заголовки:соединение & запрос:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
внутренние сервера:системные:специальные:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ
Эти переменные полностью соответствуют названным похожим образом MIME-заголовкам HTTP, и переменным сервера Apache или полям struct tm систем Unix. Те, что являются для mod_rewrite специальными включают:
IS_SUBREQ - Будет содержать текст «true» если запрос выполняется в текущий момент как подзапрос, «false» в другом случае. Подзапросы могут быть сгенерированны модулями которым нужно иметь дело с дополнительными файлами или URI для того чтобы выполнить собственные задачи.
API_VERSION - Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h. API версия модуля соответствует используемой версии Apache (для версии Apache 1.3.14, к примеру это 19990320:10), однако это в основном интересно авторам модулей.
THE_REQUEST - Полная строка HTTP запроса отправленная браузером серверу (т.е., «GET /index.html HTTP/1.1»). Она не включает какие-либо дополнительные заголовки отправляемые браузером.
REQUEST_URI - Ресурс, запрошенный в строке HTTP запроса.
REQUEST_FILENAME - Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу.
Примечания:
filename внутренней структуры request_rec сервера Apache. Первое имя это просто широко известное имя переменной CGI в то время как второе это постоянная копия REQUEST_URI (содержащая значение поля uri структуры request_rec).%{ENV:переменная} где переменная может быть любой переменной окружения. Это ищется во внутренних структурах Apache и (если там нет) с помощью вызова getenv() из процесса Apache сервера.%{HTTP:заголовок} где заголовок может быть любым именем HTTP MIME-заголовка. Это ищется в HTTP запросе. Пример: %{HTTP:Proxy-Connection} значение HTTP заголовка «Proxy-Connection:».%{LA-U:переменная} опережающих запросов которые производятся внутренним (основанном на URL) подзапросом для определения конечного значения переменной. Используйте это когда вы хотите использовать переменную для преобразований, которая реально определяется позднее, в какой-либо фазе API, и таким образом недоступна на данном этапе. Для примера когда вы хотите преобразовать соответственно переменной REMOTE_USER из контекста сервера (файл httpd.conf) вы должны использовать %{LA-U:REMOTE_USER} потому что эта переменная устанавливается в фазах авторизации которые идут после фазы трансляции URL в которой и работает mod_rewrite. С другой стороны, по причине реализации работы mod_rewrite в контексте каталога (файл .htaccess) через Fixup фазу API и из-за того, фазы авторизации идут до этой фазы, вы просто можете там использовать %{REMOTE_USER}.%{LA-F:переменная} который создает внутренний (основанный на имени файла) подзапрос для определения конечного значения переменной. В основном это то же самое что и формат LA-U приведенный выше.Обычно код главной страницы физически расположен в файле index.html или index.php, но сайт должен открываться по любому из запросов: yoursite.ru, yoursite.ru/index.html, www.yoursite.ru и www.yoursite.ru/index.html. Но для поисковых систем это четыре разных URL! Если не настроить .htaccess верно, поисковик добавит в свой индекс четыре одинаковых страницы. Это признак некачественного сайта. Избежать этой проблемы можно с помощью такого кода в .htaccess:
Options +FollowSymLinksRewriteEngine onRewriteCond %{HTTP_HOST} ^yoursite.ruRewriteRule (.*) http://www.yoursite.ru/$1 [R=301,L]RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/RewriteRule ^index\.html$ http://www.yoursite.ru/ [R=301,L]Все страницы-дубли будут склеены редиректом с кодом 301 с главной страницей – http://www.yoursite.ru/.
Чтобы предотвратить ситуацию с индексированием страниц www.yoursite.ru/about и www.yoursite.ru/about/ как разных, ставим следущий код:
Со страниц без слэша будет установлен редирект на «слэшевые».
RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_URI} !(.*)/$RewriteRule ^(.*)$ /$1/ [R=301,L]Многие видели, как при попытке скачать архив с расширением .rar браузер открывает его в виде простого текста из мешанины символов. Это значит, что на сервере сайта не настроено принудительное сохранение типов файлов, которые не должны открываться в браузере.
AddType application/octet-stream .rar .doc .mov .avi .pdf .xls .mp4SetOutputFilter DEFLATEHeader unset ETagFileETag NoneСледующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта.
RewriteCond %{REQUEST_URI} /+[^\.]+$RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]При использовании встроенных шрифтов Firefox не позволяет брать их с внешних сайтов. Следующий код для файла .htaccess позволит обойти данное ограничение.
<FilesMatch "\.(ttf|otf|eot|woff)$"><IfModule mod_headers.c>#Замените yourdomain.com на адрес вашего блогаHeader set Access-Control-Allow-Origin "http://yourdomain.com"</IfModule></FilesMatch>При разработке кода JavaScript иногда требуется использовать PHP в файлах .js, например, для получения данных из базы данных.
AddType application/x-httpd-php .jsAddHandler x-httpd-php5 .js<FilesMatch "\.(js|php)$">SetHandler application/x-httpd-php</FilesMatch># Если есть запрашиваемый файл из корня сайта, в папке домена, то перенаправляем его тудаRewriteCond %{DOCUMENT_ROOT}/domain/%{HTTP_HOST}/root%{REQUEST_URI} -fRewriteRule ^(.*)$ /domain/%{HTTP_HOST}/root/$1 [L]Если вы столкнулись с проблемой, что какие-то типы User Agent нагружают ваш сервер ненужными запросами, то от них можно избавиться добавив в .htaccess следующие строчки:
SetEnvIfNoCase User-Agent "^Black Hole" bad_botSetEnvIfNoCase User-Agent "^Titan" bad_botSetEnvIfNoCase User-Agent "^WebStripper" bad_botSetEnvIfNoCase User-Agent "^NetMechanic" bad_botSetEnvIfNoCase User-Agent "^CherryPicker" bad_botSetEnvIfNoCase User-Agent "^EmailCollector" bad_botSetEnvIfNoCase User-Agent "^EmailSiphon" bad_botSetEnvIfNoCase User-Agent "^WebBandit" bad_botSetEnvIfNoCase User-Agent "^EmailWolf" bad_botSetEnvIfNoCase User-Agent "^ExtractorPro" bad_botSetEnvIfNoCase User-Agent "^CopyRightCheck" bad_botSetEnvIfNoCase User-Agent "^Crescent" bad_botSetEnvIfNoCase User-Agent "^Wget" bad_botSetEnvIfNoCase User-Agent "^SiteSnagger" bad_botSetEnvIfNoCase User-Agent "^ProWebWalker" bad_botSetEnvIfNoCase User-Agent "^CheeseBot" bad_botSetEnvIfNoCase User-Agent "^Teleport" bad_botSetEnvIfNoCase User-Agent "^TeleportPro" bad_botSetEnvIfNoCase User-Agent "^MIIxpc" bad_botSetEnvIfNoCase User-Agent "^Telesoft" bad_botSetEnvIfNoCase User-Agent "^Website Quester" bad_botSetEnvIfNoCase User-Agent "^WebZip" bad_botSetEnvIfNoCase User-Agent "^moget/2.1" bad_botSetEnvIfNoCase User-Agent "^WebZip/4.0" bad_botSetEnvIfNoCase User-Agent "^WebSauger" bad_botSetEnvIfNoCase User-Agent "^WebCopier" bad_botSetEnvIfNoCase User-Agent "^NetAnts" bad_botSetEnvIfNoCase User-Agent "^Mister PiX" bad_botSetEnvIfNoCase User-Agent "^WebAuto" bad_botSetEnvIfNoCase User-Agent "^TheNomad" bad_botSetEnvIfNoCase User-Agent "^WWW-Collector-E" bad_botSetEnvIfNoCase User-Agent "^RMA" bad_botSetEnvIfNoCase User-Agent "^libWeb/clsHTTP" bad_botSetEnvIfNoCase User-Agent "^asterias" bad_botSetEnvIfNoCase User-Agent "^httplib" bad_botSetEnvIfNoCase User-Agent "^turingos" bad_botSetEnvIfNoCase User-Agent "^spanner" bad_botSetEnvIfNoCase User-Agent "^InfoNaviRobot" bad_botSetEnvIfNoCase User-Agent "^Harvest/1.5" bad_botSetEnvIfNoCase User-Agent "^Bullseye/1.0" bad_botSetEnvIfNoCase User-Agent "^Mozilla/4.0 (compatible; BullsEye; Windows 95)" bad_botSetEnvIfNoCase User-Agent "^Crescent Internet ToolPak HTTP OLE Control v.1.0" bad_botSetEnvIfNoCase User-Agent "^CherryPickerSE/1.0" bad_botSetEnvIfNoCase User-Agent "^CherryPicker /1.0" bad_botSetEnvIfNoCase User-Agent "^WebBandit/3.50" bad_botSetEnvIfNoCase User-Agent "^NICErsPRO" bad_botSetEnvIfNoCase User-Agent "^Microsoft URL Control - 5.01.4511" bad_botSetEnvIfNoCase User-Agent "^DittoSpyder" bad_botSetEnvIfNoCase User-Agent "^Foobot" bad_botSetEnvIfNoCase User-Agent "^WebmasterWorldForumBot" bad_botSetEnvIfNoCase User-Agent "^SpankBot" bad_botSetEnvIfNoCase User-Agent "^BotALot" bad_botSetEnvIfNoCase User-Agent "^lwp-trivial/1.34" bad_botSetEnvIfNoCase User-Agent "^lwp-trivial" bad_botSetEnvIfNoCase User-Agent "^Wget/1.6" bad_botSetEnvIfNoCase User-Agent "^BunnySlippers" bad_botSetEnvIfNoCase User-Agent "^Microsoft URL Control - 6.00.8169" bad_botSetEnvIfNoCase User-Agent "^URLy Warning" bad_botSetEnvIfNoCase User-Agent "^Wget/1.5.3" bad_botSetEnvIfNoCase User-Agent "^LinkWalker" bad_botSetEnvIfNoCase User-Agent "^cosmos" bad_botSetEnvIfNoCase User-Agent "^moget" bad_botSetEnvIfNoCase User-Agent "^hloader" bad_botSetEnvIfNoCase User-Agent "^humanlinks" bad_botSetEnvIfNoCase User-Agent "^LinkextractorPro" bad_botSetEnvIfNoCase User-Agent "^Offline Explorer" bad_botSetEnvIfNoCase User-Agent "^Mata Hari" bad_botSetEnvIfNoCase User-Agent "^LexiBot" bad_botSetEnvIfNoCase User-Agent "^Web Image Collector" bad_botSetEnvIfNoCase User-Agent "^The Intraformant" bad_botSetEnvIfNoCase User-Agent "^True_Robot/1.0" bad_botSetEnvIfNoCase User-Agent "^True_Robot" bad_botSetEnvIfNoCase User-Agent "^BlowFish/1.0" bad_botSetEnvIfNoCase User-Agent "^JennyBot" bad_botSetEnvIfNoCase User-Agent "^MIIxpc/4.2" bad_botSetEnvIfNoCase User-Agent "^BuiltBotTough" bad_botSetEnvIfNoCase User-Agent "^ProPowerBot/2.14" bad_botSetEnvIfNoCase User-Agent "^BackDoorBot/1.0" bad_botSetEnvIfNoCase User-Agent "^toCrawl/UrlDispatcher" bad_botSetEnvIfNoCase User-Agent "^WebEnhancer" bad_botSetEnvIfNoCase User-Agent "^TightTwatBot" bad_botSetEnvIfNoCase User-Agent "^suzuran" bad_botSetEnvIfNoCase User-Agent "^VCI WebViewer VCI WebViewer Win32" bad_botSetEnvIfNoCase User-Agent "^VCI" bad_botSetEnvIfNoCase User-Agent "^Szukacz/1.4" bad_botSetEnvIfNoCase User-Agent "^QueryN Metasearch" bad_botSetEnvIfNoCase User-Agent "^Openfind data gathere" bad_botSetEnvIfNoCase User-Agent "^Openfind" bad_botSetEnvIfNoCase User-Agent "^Xenu's Link Sleuth 1.1c" bad_botSetEnvIfNoCase User-Agent "^Xenu's" bad_botSetEnvIfNoCase User-Agent "^Zeus" bad_botSetEnvIfNoCase User-Agent "^RepoMonkey Bait & Tackle/v1.01" bad_botSetEnvIfNoCase User-Agent "^RepoMonkey" bad_botSetEnvIfNoCase User-Agent "^Zeus 32297 Webster Pro V2.9 Win32" bad_botSetEnvIfNoCase User-Agent "^Webster Pro" bad_botSetEnvIfNoCase User-Agent "^EroCrawler" bad_botSetEnvIfNoCase User-Agent "^LinkScan/8.1a Unix" bad_botSetEnvIfNoCase User-Agent "^Keyword Density/0.9" bad_botSetEnvIfNoCase User-Agent "^Kenjin Spider" bad_botSetEnvIfNoCase User-Agent "^Cegbfeieh" bad_bot<limit get="" post="" head="">Order Allow,DenyAllow from allDeny from env=bad_bot</limit>RewriteEngine onRewriteCond %{HTTP:Accept-Language} (ru) [NC]RewriteRule .* КУДА [L]Включая переходы без REFERER, т.е. когда адрес указывают в строке браузера.
RewriteEngine onRewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]RewriteRule \.(jpg|jpeg|png|gif)$ КУДА_ПОСЛАТЬ [NC,R,L]Только по сссылкам на чужих сайтах:
RewriteEngine onRewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]RewriteRule \.(jpg|jpeg|png|gif)$ КУДА_ПОСЛАТЬ [NC,R,L]Если вы не хотите, чтобы пользователи переходя с определенных сайтов попадали на ваш, вы можете это запретить.
RewriteEngine onRewriteCond %{HTTP_REFERER} bannedurl1.com [NC,OR]RewriteCond %{HTTP_REFERER} bannedurl2.com [NC,OR]RewriteRule .* - [F]bannedurl1.com и bannedurl2.com — примеры запрещенных сайтов.
Объем загружаемого файла:
php_value upload_max_filesize 15MМаксимальный размер запроса для загрузки в PHP:
php_value post_max_size 10MВремя выполнения скрипта:
php_value max_execution_time 240Время для скрипта на разбор введенных данных:
php_value max_input_time 180Установка заголовка X-UA-Compatible:
Header set X-UA-Compatible "IE=Edge"Для поисковой оптимизации, и уменьшения времени загрузки страницы, Google рекомендует установить заголовок Vary: Accept-Encoding
Заголовок ответа HTTP/1.1 Vary позволяет серверу указать, что закэшированный ресурс может использоваться без проверки только, если указанные в Vary заголовки совпадают с заголовками запроса. Значения: Accept-Encoding, Host, User-Agent, Accept-Language.
<IfModule mod_headers.c><FilesMatch "\.(js|css|xml|gz|html)$"> Header append Vary: Accept-Encoding</FilesMatch></IfModule>Alias /javascripts /usr/share/javascript/<Directory "/usr/share/javascript/">Options FollowSymLinks MultiViews</Directory>Положите общий файл, например, icon.png в директорию /usr/share/javascript/ В файл /etc/javascript-common/javascript-common.conf и добавьте строку:
Alias /apple-touch-icon-precomposed.png /usr/share/javascript/icon.pngЕсли у вас открываются .doc, .docx файлы в браузере с непонятной кодировкой и вы хотите чтобы при левом клике файл сохранялся, а не открывался, то вам необходимо прописать в .htaccess:
AddType application/force-download docAddType application/force-download docxAddType application/force-download xlsAddType application/force-download xlsxЕсли вы используете https и хотите, чтобы все пользователи перенаправлялись на него, то вам поможет следующий код:
RewriteEngine OnRewriteCond %{HTTPS} !onRewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}Если Ваш логин на сайте admin и он устанавливается в куку с именем login Вы можеле легко закрыть доступ посторонним в любую директорию. Для этого создайте в этой директории(папке) файл .htaccess со следующим содержимым:
RewriteEngine OnRewriteCond %{HTTP_COOKIE} !login=admin [NC]RewriteRule .* http://%{HTTP_HOST}/ [L,R=301]По этому же принципу можно закрывать сайт на профилактические работы для всех кроме админа.
Если PHP не установлен как модуль Apache, то для доступа к заголовкам «If-Modified-Since» и «If-None-Match» необходимо в корневом каталоге веб-сайта поместить файл .htaccess следующего содержания:
RewriteEngine OnRewriteRule .* — [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]RewriteRule .* — [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]После этого, необходимые заголовки будут доступны как $_SERVER['HTTP_IF_MODIFIED_SINCE'] и $_SERVER['HTTP_IF_NONE_MATCH'].
Следует заметить, что заголовки «If-Modified-Since» и «If-None-Match» не отправляются браузером, если в предыдущих запросах к данной странице он не получал в ответе веб-сервера заголовок «Last-Modified». Кроме того, при использовании в веб-приложении сессий с установками по умолчанию, указанные заголовки также не будут присылаться браузером. Для того чтобы избежать такого поведения браузера, необходимо перед запуском сессии выполнять функцию session_cache_limiter, передавая в качестве аргумента параметр 'private_no_expire':
session_cache_limiter('private_no_expire');session_start();# Запуск перед запрашиваемым файломphp_value auto_prepend_file "/dir/header.php"# Запуск после запрашиваемого файлаphp_value auto_append_file "/dir/footer.php"