Суббота, 21 октября 2017 г.
Главная | Статьи | Вопросы | Словарь | О нас | Сервисы | Веб-дизайн | Хостинг | Шаблоны
создание сайтов и интернет-магазинов


156 интернет-проектов выполнено компанией ИНТЕРДИЗАЙН.ру156 интернет-проектов выполнено компанией ИНТЕРДИЗАЙН.ру156 интернет-проектов выполнено компанией ИНТЕРДИЗАЙН.ру

156 - именно столько интернет-проектов выполнено нашей компанией на сегодняшний день.


Создание интернет-магазина
  • - разработка уникального дизайна
  • - индивидуальный подход
  • - размещение магазина
  • Сегодня можно со всей уверенностью заявить о том, иметь раскрученный сайт или интернет-магазин – синоним понятия «успешный бизнес». Именно поэтому особенно важно, чтобы как создание сайтов, так и создание интернет-магазина было доверено настоящим профессионалам своего дела.

    Заказать разработку сайта


    Имя
    e-mail: Телефон:
    Сообщение

    Докажите, что вы не робот:

    2+3 =










    ИНТЕРДИЗАЙН :: Статьи ::

    Тонкая настройка .htaccess

    .htaccess (с точкой в начале имени) - это файл-конфигуратор Apache-серверов, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу. Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок. .htaccess представляет собой обычный текстовый документ, расширение которого htaccess. Данный файл обычно находится в корне сайта, однако Вы можете создавать и дополнительные .htaccess-файлы для различных директорий Вашего сайта.

    Mod_rewrite - модуль, используемый веб-серверами для преобразования URL'ов.

    Варианты реализации Редиректа с помощью файла .htaccess

    1. Простой редирект:
      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 - новый путь и новое имя перемещенной страницы 

    2. Редирект на любую страницу по ip пользователя или при запросе конкретной страницы (а также по маске имени).
      Если у пользователя ip 192.152.37.125, то он будет перенаправлен на страницу user.php:
      SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir"
      RewriteCond %{REDIR} redir
      RewriteRule ^/$ /user.php
      
    3. Редирект при запросе определённых файлов. Если запрашиваются файлы, расширение которых не указано в файле .htaccess (gif и jpg), то следует перенаправление:
      RewriteEngine On
      RewriteRule !.(gif|jpg)$ index.php
      
    4. Использование mod_rewrite:
      Options +FollowSymLinks 
      RewriteEngine on 
      RewriteCond %{HTTP_HOST} ^yourdomain.ru 
      RewriteRule ^(.*)$ http://www.yourdomain.ru/$1 [R=permanent,L]
      
    5. Редирект с регулярным выражением:
      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)" должна быть последней в этом списке. 

    6. Создание удобо читаемых 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
      
    7. Редирект на 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, которые не поддерживают виртуальный хостинг) 

    8. Редирект всех файлов в папке на один файл.
      Например вы больше не нуждаетесь в разделе сайта Super discount и хотите перенаправить все запросы к папке /superdiscount на один файл /hot-offers.php. Для этого добавляем в .htaccess следующий код.
      RewriteRule ^superdiscount(.*)$ /hot-offers.php [L,R=301]
      
    9. Редирект всей папки кроме одного файла
      В следующем примере все файлы из папки /superdiscount будут редиректится на на файл /hot-offers.php, КРОМЕ файла /superdiscount/my-ebook.html котоый должен редиректится на /hot-to-make-million.html
      RewriteRule ^superdiscount/my-ebook.html /hot-to-make-million.html [L,R=301]
      RewriteRule ^superdiscount(.*)$ /hot-offers.php [L,R=301]
      
    10. Редирект динамического 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.

    11. Массовый редирект новых файлов.
      Тепепь перейдем к самому сложному моменту, когда вам надо редиректить массу 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("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();
      ?>
      

      Теперь все запросы к вашим старым URL-ам будут вызывать redirectold.php, который найдет новый URL и вернет 301 ответ с вашей новой ссылкой.

      Редиректы в зависимости от времени

      Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?

      Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения <STRING, >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.

    12. Убираем у всех запросов вначале "WWW."
      RewriteEngine on    # оглашаем, что хотим использовать mod_rewrite
      RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
      RewriteRule ^/?(.*) http://%1/$1 [L,R=permanent]
      
    13. Меняем расширение .html на .php
      Иногда бывает так, что у Вас статичный веб-сайт, а Вам необходимо, чтобы на нем срабатывал какой-нибудь php-скрипт. Для этого Вам необходимо сказать серверу, чтобы он обрабатывал эту страницу как php-файл.
      AddHandler application/x-httpd-php .html
      
      Этот прием можно использовать и для других расширений файлов:
      AddHandler application/x-httpd-php .xml
      AddHandler application/x-httpd-php .asp
      

    Запрещение доступа в конкретную директорию

    1. для всех ко всем файлам в директории:
      deny from all
      
    2. к конкретному файлу:
      <Files secret.php>
      deny from all
      </Files>
      
    3. по ip пользователя:
      order deny,allow
      deny from all
      allow from 192.152.37.125
      
      Доступ в данную директорию будет разрешён только пользователю с ip 192.152.37.125.

      А если хотите наоборот, запретить отдельным ip пользователям доступ к вашему сайту, то пропишем следующие строчки:

      <Limit GET POST PUT>
      order allow,deny
      allow from all
      deny from 192.152.37.125
      deny from 123.456.177
      </LIMIT>
      
    4. Директива Options -Indexes - запрет на отображение содержимого каталога при отсутствии индексного файла Иногда нужно сделать так, чтобы в случае отсутствия в каталоге файла, который показывается по умолчанию, не выдавался список файлов в каталоге. Тогда можно добавить в .htaccess такую строчку :
      Options -Indexes
      
      В этом случае вместо списка файлов в каталоге посетитель получит HTTP ошибку 403 - access forbidden.
    5. Запретить доступа к файлам с несколькими типа расширений
      <Files ~ ".(inc|conf|cfg)$">
        deny from all
      </Files>
      
      Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива, по умолчанию, не работает с регулярными выражениями, но их можно включить поставив символ тильды(~) в опциях директивы. Синтаксис следующий: [тильда] [пробел] [далее_все_без_пробелов] Чтобы блокировать этот доступ, запишем следующее:
       RewriteRule ^.htaccess$ - [F]
      
      Это правило переводится так:
      Если кто-то пробует обращаться к файлу .htaccess, система должна произвести код ошибки 'HTTP response of 403' или '403 Forbidden - You don't have permission to access /.htaccess on this server'.

      Конструкция ^.htaccess$ в этом регулярном выражении означает:
      ^ - якорь начала строки
      $ - якорь конца строки
      . - в регулярных выражениях точка '.' обозначает мета-символ и должна быть защищена обратным слэшем (backslash), если Вы все-таки хотите использовать именно фактическую точку.

      Имя файла должно быть расположено точно между начальным и конечным якорем. Это будет гарантировать то, что только это определенное имя файла и никакое другое, сгенерирует код ошибки.
      [F] - специальный 'запрещающий' флажок (forbidden).
      [NC] - не учитывать регистр букв.
      [OR] - означает 'или следующее условие'.

    Определение кодировки

    Определение кодировки, в которой сервер "отдает" файлы

    AddDefaultCharset windows-1251
    

    варианты: KOI8-RUTF-8Windows-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.php
    

    IE игнорирует страницы размером меньше 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=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

    Чтобы иметь больше информации о посещении поисковиков, полезно иметь подробную информацио об обращении к файлу 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
    

    Если вам все это показалось сложным, воспользуйтесь готовым сервисом преобразования динамических URL в статические с помощью htaccess

    Директивы кеширования

    Кэширование для всех типов файлов по времени доступа

    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-Control
    <IfModule mod_headers.c>
    Header append Cache-Control "no-store, no-cache, must-revalidate"
    </IfModule>
    
    # Заголовок Expires
    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "now"
    </IfModule>
    

    Необходимые заголовки будут передаваться автоматически, и специально их писать в PHP уже не нужно - кэш уже выключен!

    Описание http-заголовка кеширования Cache-control

    Кеширование с помощью файла .htaccess

    # Разрешение кеширования в этой папке
    # Необходимо включение модулей
    # mod_headers.c и mod_expires.c
    #
    # Заголовок Cache-Control
    <IfModule mod_headers.c>
       Header append Cache-Control "public"
    </IfModule>
    # Заголовок Expires
    <IfModule mod_expires.c>
       ExpiresActive On
       ExpiresDefault "access plus 1 hours"
       #ExpiresDefault "access plus 10 years"
    </IfModule>
    

    Кеширование javascript файлов с помощью файла .htaccess

    <FilesMatch .*.js$>
        ExpiresDefault "access plus 3 days"
    </FilesMatch>
    

    Будьте осторожны при кешировании, т.к. при изменении файла, пользователь может получить новый вариант только через 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 - домен, для которого мы делаем перенаправление

    Обратите внимание, что при этом у Вас будет единый почтовый аккаунт. Т.е. если, у Вас существует ящик 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}  -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

    Такое может происходить из-за установленного модуля <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 Off
    SecFilterScanPOST 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 - Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу.

    Примечания:

    1. Переменные SCRIPT_FILENAME и REQUEST_FILENAME содержат одинаковые значения, т.е., значение поля filename внутренней структуры request_rec сервера Apache. Первое имя это просто широко известное имя переменной CGI в то время как второе это постоянная копия REQUEST_URI (содержащая значение поля uri структуры request_rec).
    2. Есть специальный формат: %{ENV:переменная} где переменная может быть любой переменной окружения. Это ищется во внутренних структурах Apache и (если там нет) с помощью вызоваgetenv() из процесса Apache сервера.
    3. Есть специальный формат: %{HTTP:заголовок} где заголовок может быть любым именем HTTP MIME-заголовка. Это ищется в HTTP запросе. Пример: %{HTTP:Proxy-Connection} значение HTTP заголовка «Proxy-Connection:».
    4. Есть специальный формат %{LA-U:переменная} опережающих запросов которые производятся внутренним (основанном на URL) подзапросом для определения конечного значения переменной. Используйте это когда вы хотите использовать переменную для преобразований, которая реально определяется позднее, в какой-либо фазе API, и таким образом недоступна на данном этапе. Для примера когда вы хотите преобразовать соответственно переменной REMOTE_USER из контекста сервера (файл httpd.conf) вы должны использовать %{LA-U:REMOTE_USER} потому что эта переменная устанавливается в фазах авторизации которые идут после фазы трансляции URL в которой и работает mod_rewrite. С другой стороны, по причине реализации работы mod_rewrite в контексте каталога (файл .htaccess) через Fixup фазу API и из-за того, фазы авторизации идут до этой фазы, вы просто можете там использовать %{REMOTE_USER}.
    5. Есть специальный формат: %{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} ^[A-Z]{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
    

    Сжатие отправляемых страниц

    SetOutputFilter DEFLATE
    Header unset ETag
    FileETag None
    

    Принудительная постановка замыкающего слеша

    Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта.

    RewriteCond %{REQUEST_URI} /+[^.]+$
    RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
    

    Междоменное использование шрифтов для FireFox

    При использовании встроенных шрифтов Firefox не позволяет брать их с внешних сайтов. Следующий код для файла .htaccess позволит обойти данное ограничение.

    <FilesMatch ".(ttf|otf|eot|woff)$">
    <IfModule mod_headers.c>
    #Замените yourdomain.com на адрес вашего блога
    Header set Access-Control-Allow-Origin "http://yourdomain.com"
    </IfModule>
    </FilesMatch>
    

    Выполнять PHP в файлах JavaScript

    При разработке кода JavaScript иногда требуется использовать PHP в файлах .js, например, для получения данных из базы данных.

    AddType application/x-httpd-php .js
    AddHandler x-httpd-php5 .js
     
    <FilesMatch ".(js|php)$">
    SetHandler application/x-httpd-php
    </FilesMatch>
    

     


    Руководство по созданию интернет-магазина

      Главная | Статьи | Вопросы | Словарь | О нас | Сервисы | Карта сайта | Вакансии