Файл-конфігуратор Apache-серверів .htaccess
.htaccess (з точкою на початку імені) - це файл-конфігуратор Apache-серверів, який дає можливість конфігурувати роботу сервера в окремих директоріях (папках), котрі дають доступу до головного конфігураційного файлу. Наприклад, встановлювати права доступу до файлів в директорії, змінювати назви індексних файлів, самостійно обробляти помилки Apache, перенаправляючи відвідувачів на спеціальні сторінки помилок. .htaccess є звичайним текстовим документ, розширення якого htaccess. Даний файл зазвичай знаходиться в корені сайту, проте Ви можете створювати і додаткові .htaccess-файли для різних директорій Вашого сайту.
Mod_rewrite - модуль, який використовується веб-серверами для перетворення URL'ов.
Директиви модуля Mod_rewrite
- RewriteBase
- RewriteCond
- RewriteEngine
- RewriteLock
- RewriteLog
- RewriteLogLevel
- RewriteMap
- RewriteOptions
- RewriteRule
Варіанти реалізації редирект з допомогою файлу .htaccess
- Простий редирект:
Redirect 301 / http://www.domainname.ru/
абоredirect / secret http://www.site.ru/nosecret
Ставиться у файлі .htaccess або httpd.conf для Apache. Перший "/" означає, що все з верхнього рівня сайту, включаючи всі підкаталоги, буде переадресовано (не забудьте поставити останній "/"). Якщо Ви хочете переадресувати тільки сторінку, зберігши PR старої сторінки, можна зробити так:Redirect 301 /old/old.htm http://www.you.ru/new.htm де:
/old/old.htm - шлях і ім'я старої сторінки
http://www.you.com/new.htm - новий шлях і нове ім'я переміщеної сторінки - Редирект на будь-яку сторінку з ip користувача або при запиті конкретної сторінки (а також по масці імені).
Якщо у користувача ip 192.152.37.125, то він буде перенаправлений на сторінку user.php:SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR = "redir" RewriteCond% {REDIR} redir RewriteRule ^ / $ /user.php
- Редирект при запиті певних файлів. Якщо запитуються файли, розширення яких не вказано в файлі .htaccess (gif та jpg), то слід перенаправлення:
RewriteEngine On RewriteRule!. (Gif | jpg) $ index.php
- Використання mod_rewrite:
Options + FollowSymLinks RewriteEngine on RewriteCond% {HTTP_HOST} ^ yourdomain \ .ru RewriteRule ^ (. *) $ Http://www.yourdomain.ru/$1 [R = permanent, L]
- Редирект з регулярним виразом:
RedirectMatch 301 (. *) Http: //www.yourdomain.ru$1 Прописується в файлі .htaccess.
(. *) RedirectMatch фактично відповідає регулярним зразкам вираження після доменного імені. Таким чином, не можна виконати відповідність зразка на ^ / yourdomain.ru. Однак, можна перетворити сторінки з використанням .html розширення до файлів того ж самої назви, але з .php розширенням:RedirectMatch 301 (. *) \. Html $ http: //www.yourdomain.ru$1.php
Якщо необхідно зробити різне перенаправлення для окремих сторінок, можна використовувати наступне:RedirectMatch Permanent ^ / html / resources.html $ http://www.newdomain.com/resources.php RedirectMatch Permanent ^ / html / other_page.html $ http://www.newdomain.com/other_page.php RedirectMatch Permanent ^ / (. *) $ Http://www.newdomain.com/
"RedirectMatch Permanent" - це еквівалент "RedirectMatch 301", рядок з "* (Wildcard)" повинна бути останньою в цьому списку.
- Створення зручний читаються URL
Щоб перетворити, наприклад, www.site.ru/product.php?id=123 в www.site.ru/product/123 наступним чином:RewriteEngine on RewriteRule ^ product /([^/\.]+)/?$ product.php? Id = $ 1 [L]
У наступному прикладі перетворимо www.site.ru/script.php?product=123 в www.site.ru/cat/product/123/:RewriteRule cat /(.*)/(.*)/$ /script.php?$1=$2
- Редирект на PHP:
header ( "HTTP / 1.1 301 Moved Permanently"); header ( "Location: http://www.newdomain.ru/newdir/newpage.htm"); exit ();
Природно, треба створити сторінку, при зверненні до якої і буде відбуватися Редірект, і розмістити її на сервері. І краще вкажіть HTTP / 1.1 (а не HTTP / 1.0 або HTTP / 0.9, які не підтримують віртуальний хостинг)
- Редирект всіх файлів в папці на один файл.
Наприклад ви більше не потребуєте в розділі сайту Super discount і хочете перенаправити всі запити до папки / superdiscount на один файл /hot-offers.php. Для цього додаємо в .htaccess наступний код.RewriteRule ^ superdiscount (. *) $ /hot-offers.php [L, R = 301]
- Редирект всієї папки крім одного файлу
У наступному прикладі всі файли з папки / superdiscount будуть редирект на на файл /hot-offers.php, КРІМ файлу /superdiscount/my-ebook.html кото повинен редирект на /hot-to-make-million.htmlRewriteRule ^ superdiscount / my-ebook.html /hot-to-make-million.html [L, R = 301] RewriteRule ^ superdiscount (. *) $ /hot-offers.php [L, R = 301]
- Редирект динамічного URL на новий файл.
Даний варіант стане в нагоді якщо ви хочете редирект динамічний URL з параметрами на новий статичний файл.RewriteRule ^ article.jsp? Id = (. *) $ /latestnews.htm [L, R = 301]
Тобто тепер, запит до файлу виду http://www.kass.ws/article.jsp?id=8632 і / або http://www.kass.ws/article.jsp?id=1245 буде відправлений на файл http : //www.kass.ws/latestnews.htm.
- Масовий редирект нових файлів.
Тепепь перейдемо до найскладнішого моменту, коли вам треба редирект масу URL-ів, наприклад після зміни вашої CMS. Тут відразу виникає ряд проблем. По-перше, внесення всіх змінених адрес в .htaccess файл займе дуже багато часу, та й саме по собі заняття малоприємне. По-друге, занадто багато записів в .htaccess файлі будуть гальмувати Apache сервера. І по-третє, при внесенні такої кількості інформації висока ймовірність, що ви десь помилитеся. З цього, найкращий вихід, це найняти програміста який вам напише динамічний редирект.
Наведений нижче приклад написаний на PHP, але так само може бути виконаний на будь-якій мові. Припустимо ви перейшли на нову систему посилань на вашому сайті і всі файли що закінчуються на старий id повинні бути средірекчени. Спочатку створюємо в базі таблицю, яка містить старий id і новий URL для перенаправлення. old_id INT new_url VARCHAR (255) Далі пишемо код який зв'яже ваші старі id з новими URL-ами
Після цього, додаємо наступний рядок в .htaccess:RewriteRule ^ / product - (. *) _ ([0-9] +). Php /redirectold.php?productid=$2
потім створюємо PHP файл redirectold.php, який буде підтримувати 301 редирект:<? Php function getRedirectUrl ($ productid) {// Connect to the database $ dServer = "localhost"; $ DDb = "mydbname"; $ DUser = "mydb_user"; $ DPass = "password"; $ S = @mysql_connect ($ dServer, $ dUser, $ dPass) or die ( "Could not connect to database server"); @mysql_select_db ($ dDb, $ s) or die ( "Could not 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 (); ?>
Тепер всі запити до ваших старих URL-ам викликатимуть redirectold.php, який знайде новий URL і поверне 301 відповідь з вашої нової посиланням.
Редіректи в залежності від часу
Коли потрібно застосовувати прийоми типу змісту залежить від часу маса вебмайстрів все ще використовують CGI скрипти які виробляють редіректи на спеціальні сторінки. Як це може бути зроблено через mod_rewrite?
Є багато змінних названих TIME_xxx для умов перенаправлення. У зв'язці зі спеціальними лексикографічними зразками для порівнянняSTRING і = STRING ми можемо виробляти редіректи залежать від часу: 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.html
Це видає вміст foo.day.html при запиті URL foo.html з 07:00 до 19:00 а в час, що залишився вміст foo.night.html.
- Прибираємо у всіх запитів спочатку "WWW."
RewriteEngine on # оголошуємо, що хочемо використовувати mod_rewrite RewriteCond% {HTTP_HOST} ^ www \. (. *) [NC] RewriteRule ^ /? (. *) Http: //% 1 / $ 1 [L, R = permanent]
- Міняємо розширення .html на .php
Іноді буває так, що у Вас статичний веб-сайт, а Вам необхідно, щоб на ньому спрацьовував якийсь php-скрипт. Для цього Вам необхідно сказати сервера, щоб він обробляв цю сторінку як php-файл.AddHandler application / x-httpd-php .html
Цей прийом можна використовувати і для інших розширень файлів:AddHandler application / x-httpd-php .xml AddHandler application / x-httpd-php .asp
Заборона доступу в конкретну директорію
- для всіх до всіх файлів в директорії:
deny from all
- до конкретного файлу:
deny from all - по ip користувача:
order deny, allow deny from all allow from 192.152.37.125
Доступ в цю директорію буде дозволений тільки користувачеві з ip 192.152.37.125.А якщо хочете навпаки, заборонити окремим ip користувачам доступ до вашого сайту, то пропишемо такі рядки:
order allow, deny allow from all deny from 192.152.37.125 deny from 123.456.177 - Директива Options -Indexes - заборона на відображення вмісту каталогу при відсутності індексного файлу Іноді потрібно зробити так, щоб в разі відсутності в каталозі файлу, який показується за замовчуванням, не видавався список файлів в каталозі. Тоді можна додати в .htaccess такий рядок:
Options -Indexes
У цьому випадку замість списку файлів в каталозі відвідувач отримає HTTP помилку 403 - access forbidden. - Заборонити доступу до файлів з декількома типу розширень
Заборонено доступ до файлів з розширенням * .inc, * .conf і * .cfg. Хоча директива, за замовчуванням, не працює з регулярними виразами, але їх можна включити поставивши символ тильди (~) в опціях директиви. Синтаксис наступний: [тильда] [пробіл] [далее_все_без_пробелов] Щоб блокувати цей доступ, запишемо наступне:deny from all RewriteRule ^ .htaccess $ - [F]
Це правило перекладається так:
Якщо хтось пробує звертатися до файлу .htaccess, система повинна зробити код помилки 'HTTP response of 403' або '403 Forbidden - You do not have permission to access /.htaccess on this server'.Конструкція ^ .htaccess $ в цьому регулярному виразі означає:
^ - Якір початку рядка
$ - Якір кінця рядка
. - В регулярних виразах точка '.' позначає мета-символ і повинна бути захищена зворотним слешем (backslash), якщо Ви все-таки хочете використовувати саме фактичну точку.Назва файлу повинна бути розташована точно між початковим і кінцевим якорем. Це гарантуватиме те, що тільки це певне ім'я файлу і ніяке інше, згенерує код помилки.
[F] - спеціальний 'забороняє' прапорець (forbidden).
[NC] - не враховувати регістр букв.
[OR] - означає 'або така умова'.
визначення кодування
Визначення кодування, в якій сервер "віддає" файли
AddDefaultCharset windows-1251варіанти: KOI8-R, UTF-8, Windows-1251
Визначення кодування на завантаження
CharsetSourceEnc windows-1251
Установка пароля на директорію за допомогою .htaccess
Для установки пароля на директорію можна скористатися системою базової авторизації, передбаченої в веб-сервері Apache. Створюємо в каталозі, до якого хочемо обмежити доступ по паролю, файл .htaccess з такими директивами:AuthType Basic AuthName "Some Name" AuthUserFile /www/some_login/www/htdocs/some_dir/.htpasswd require 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 on RewriteCond% {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 = 1 SetEnvIfNoCase Referer "^ http: // (www \.)? Htmlweb \ .ru" local_ref = 1 SetEnvIfNoCase Referer "^ http: // (www \.)? Images \ .yandex \ .ru" local_ref = 1 SetEnvIfNoCase Referer "^ http: // (www \.)? Hghltd \ .yandex \ .com" local_ref = 1Order Allow, Deny Allow from env = local_ref
Пошукові машини і різного роду сканери створюють колосальні трафік на вашому сайті. Наведений нижче блок коду дозволить заборонити доступ ботам на сайт.
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 | THUNDERSTONE | 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
Щоб мати більше інформації про відвідування пошуковиків, корисно мати докладну інформацій про звернення до файлу 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
Для відключення додавання PHPSESSID до URL вставте в початок index.php:
ini_set ( "session.use_trans_sid", 0);
Або в .htaccess пропишіть:
php_flag session.use_trans_sid Off
Якщо вам все це здалося складним, скористайтеся готовим
директиви кешування
Кешування для всіх типів файлів за часом доступуExpiresActive on ExpiresDefault "access plus 600 seconds"Кешування для всіх типів файлів за часом зміни
ExpiresActive on ExpiresDefault "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
Відкрийте файл конфігурації сервера Apache httpd.conf і розкоментуйте наступні рядки:
LoadModule expires_module modules / mod_expires.so LoadModule headers_module modules / mod_headers.so ... AddModule mod_expires.c AddModule mod_headers.c
Впишіть в .htaccess наступне:
# Заборона кешування в цій папці # Необхідно включення модулів # Mod_headers.c і mod_expires.c # # Тема Cache-ControlHeader append Cache-Control "no-store, no-cache, must-revalidate" # Тема ExpiresExpiresActive On ExpiresDefault "now"
Необхідні заголовки будуть передаватися автоматично, і спеціально їх писати в PHP вже не потрібно - кеш вже вимкнений!
Опис http-заголовка кешування Cache-controlКешування за допомогою файлу .htaccess
# Дозвіл кешування в цій папці # Необхідно включення модулів # Mod_headers.c і mod_expires.c # # Тема Cache-ControlHeader append Cache-Control "public" # Тема ExpiresExpiresActive On ExpiresDefault "access plus 1 hours" #ExpiresDefault "Access plus 10 years"
Кешування javascript файлів за допомогою файлу .htaccess
ExpiresDefault "access plus 3 days"
Будьте обережні при кешування, тому що при зміні файлу, користувач може отримати новий варіант тільки через 3 дні!
Як змусити html-сторінки обробляти php-код?
Пропишіть в своєму файлі .htaccess наступні рядки:RemoveHandler .php .htm .html AddHandler application / x-httpd-php .php .htm .html
Як розмістити кілька сайтів на одному віртуальному хостингу?
Щоб розмістити два або більше сайтів на одному віртуальному хостингу, всупереч відведеному вам тарифним планом кількості доменів необхідно в файлі ".htaccess" прописати наступні рядки:
RewriteEngine On RewriteRule ^ newdirectory / - [L] RewriteCond% {HTTP_HOST} (www.)? Newdomain.ru [NC] RewriteRule (. *) Newdirectory / $ 1 [L]
де:
newdirectory / - папка, в якій буде лежати другий сайт
newdomain.ru - домен, для якого ми робимо перенаправлення
Пошук сторінок більше ніж в одному каталозі
Іноді необхідно дозволити веб-сервера шукати сторінки більше ніж в одному каталозі.
RewriteEngine on # По-перше спробуємо знайти це в зазначеному місці / ... # ... І якщо знайшли те закінчуємо пошук: RewriteCond / your / docroot / dir1 /% {REQUEST_FILENAME} -f RewriteRule ^ (. +) / Your / docroot / dir1 / $ 1 [L] # По-друге - спробуємо знайти це в pub / ... # ... І якщо знайшли те закінчуємо пошук: RewriteCond / your / docroot / dir2 /% {REQUEST_FILENAME} -f RewriteRule ^ (. +) / Your / docroot / dir2 / $ 1 [L] # Інакше продовжуємо для інших директив RewriteRule ^ (. +) - [PT]
Віртуальні хости користувачів
Якщо Ви хочете надавати адреси www.subdomain.domain.ru для сторінок користувачів, Ви можете використовувати наступний набір правил для перетворення http://www.subdomain.domain.ru/path у внутрішній шлях / home / subdomain / path:
RewriteEngine on RewriteCond% {HTTP_HOST} ^ www \. [^.] + \. Ru $ RewriteRule ^ (. +)% {HTTP_HOST} $ 1 [C] RewriteRule ^ www \. ([^.] +) \. Ru (. *) / Home / $ 1 $ 2
Руйнуються файли при завантаженні на сервер
Якщо при передачі файлів через форми (при вказаному enctype = "multipart / form-data") бінарні дані пошкоджуються, пропишіть в /cgi-bin/.htaccess директиву:CharsetRecodeMultipartForms Off.
Помилка завантаження SWF файлів.
Помилки при зверненні до сторінок, що містять ключові слова,
типу $ _REQUEST
Таке може відбуватися через встановленого модуля
Можливі повідомлення про помилку:
Forbidden
You do not 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.Для повідомлення:SecFilterEngine Off SecFilterScanPOST Off
SecFilterEngine Off SecFilterScanPOST Off
Оптимально знімати захист тільки з тієї папки, в якій це необхідно, не забираючи захист з усього сайту.
змінні сервера
Це змінні виду% {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 - Повний шлях в файлової системі сервера до файлу або скрипту відповідним цим запитом.
Примітки:
- Змінні SCRIPT_FILENAME і 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 + FollowSymLinks RewriteEngine on RewriteCond% {HTTP_HOST} ^ yoursite.ru RewriteRule (. *) Http://www.yoursite.ru/$1 [R = 301, L] RewriteCond% {THE_REQUEST} ^ [AZ] {3,9} \ / index \ .html \ HTTP / RewriteRule ^ index \ .html $ http://www.yoursite.ru/ [R = 301, L]
Всі сторінки-дублі будуть склеєні перенаправленням з кодом 301 з головною сторінкою - http://www.yoursite.ru/.
Дублі сторінок без слеша в кінці URL
Щоб запобігти ситуації з індексуванням сторінок www.yoursite.ru/about і www.yoursite.ru/about/ як різних, ставимо следущий код:
Зі сторінок без слеша буде встановлено редирект на «слешевие».
RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_URI}! (. *) / $ RewriteRule ^ (. *) $ / $ 1 / [R = 301, L]
Збереження файлів замість відкриття
Багато хто бачив, як при спробі завантажити архів з розширенням .rar браузер відкриває його у вигляді простого тексту з мішанини символів. Це означає, що на сервері сайту не налаштоване примусове збереження типів файлів, які не повинні відкриватися в браузері.
AddType application / octet-stream .rar .doc .mov .avi .pdf .xls .mp4
Коментарі
Коментуючи, пам'ятайте про те, що зміст і тон Вашого повідомлення можуть зачіпати почуття реальних людей, проявляйте повагу та толерантність до своїх співрозмовників навіть у тому випадку, якщо Ви не поділяєте їхню думку, Ваша поведінка за умов свободи висловлювань та анонімності, наданих інтернетом, змінює не тільки віртуальний, але й реальний світ. Всі коменти приховані з індексу, спам контролюється.