yakoffka.ru
    грабли, костыли и велосипеды php, css, html, js и прочего

    .htaccess

    Локализация функции date

    01
    Введение

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

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

    Список всех доступных директив можно посмотреть тут.

    02
    Включение mod_rewrite

    mod_rewrite — это модуль веб сервера Apache, использующийся для преобразования URL адресов. Под преобразованием следует понимать фактически любые действия с URL.

    С помощью mod_rewrite можно настраивать редиректы, изменять URL адреса, блокировать доступ и т.д. Он поддерживает неограниченное количество правил преобразования, регулярные выражения, обратные связи с группированными частями шаблона, разные источники информации для преобразований (переменные сервера, HTTP заголовки, время и т.д.). За счет такого набора возможностей, достигается высокая функциональность и гибкость. По умолчанию этот модуль выключен, для того что бы его включить, в .htaccess необходимо добавить следующие директивы:

    .htaccess:
    1
    2
    RewriteEngine On# директива, включающая модуль
    RewriteBase /#путь от корня сайта

    03
    RewriteCond и RewriteRule

    Для построения правил используются две директивы, RewriteCond и RewriteRule.

    Директива RewriteCond определяют условия, при которых сработает правило преобразования RewriteRule. Если условие в RewriteCond выполнено, выполнятся правило в RewriteRule. Таких условий перед правилом RewriteRule может быть неограниченное количество. RewriteCond не является обязательной директивой для создания правила преобразования и может отсутствовать.

    Директива RewriteRule указывает само правило для преобразования, которое для конкретного преобразования должно быть единственным.

    04
    переадресация с домена с www на домен без www

    В настоящее время приставка 'www' перед доменным именем является ана­хро­низ­мом, так как сайты с доменными именами mydomain.com и www.mydomain.com являются зеркалами друг друга. Многие поисковые системы воспринимают www.domain.com и domain.com как разные ресурсы, со всеми вытекающими отсюда неприятностями, влияющими на раскрутку сайта.

    Чтобы избавиться от возникшей путаницы и иметь возможность раскручивать один сайт необходимо в файле .htaccess в корне сайта добавить переадресацию с домена с www на домен без www:

    .htaccess:
    1
    2
    3
    4
    5
    RewriteEngine On
    RewriteBase 
    /

    RewriteCond %{HTTP_HOST} ^www.mydomain.com$ [NC]
    RewriteRule (.*) https://mydomain.com/$1 [R=301]

    либо сделать наоборот, и переадресовывать запросы с адреса без 'www' https://mydomain.com на адрес с 'www' https://www.mydomain.com:

    .htaccess:
    1
    2
    3
    4
    5
    RewriteEngine On
    RewriteBase 
    /

    RewriteCond %{HTTP_HOST} ^mydomain.com$ [NC]
    RewriteRule (.*) https://www.mydomain.com/$1 [R=301]

    Вышеприведенная модификация .htaccess хороша тем, что используя регулярные выражения, мы, тем самым, сохраняем структуру ссылки, то есть, например, при обращении к ресурсу 'www.mydomain.com/art?cat=name_cat' вы будете переадресованы на 'mydomain.com/art?cat=name_cat'.

    Важно сделать склейку зеркал до регистрации в поисковых системах, так как последние выбирают главное зеркало как пожелают. Я рекомендую использовать первый вариант, так как от анахронизмов надо избавляться, но если время упущено и индексирование сайта произведено, то используйте первый или второй вариант исходя из сложившихся предпочтений ПС.

    05
    Создание собственных страниц ошибок

    Директива RewriteEngine включает или выключает работу механизма преобразования

    .htaccess:
    1
    ErrorDocument 404 https://mydomain.com/404.html

    06
    Кодировка веб страниц

    Кодировка веб страницы определяется тем, в каком формате ее содержимое было сохранено перед загрузкой на сервер. Также в HTML5 прописывается заголовок, указывающий браузеру какую кодировку использовать:

    index.php:
    1
    <meta charset="UTF-8">

    Добавив директиву 'addDefaultCharset' в .htaccess можно задать кодировку для всех файлов в текущем каталоге и других каталогах, находящихся ниже в иерархическом дереве.

    .htaccess:
    1
    AddDefaultCharset UTF-8

    07
    Отображение ошибок в PHP

    Во время написания и отладки сайта будет полезным произвести включение вывода ошибок и предупреждений в файле .htaccess. Очередность обрабатывания директив: параметр в php.ini, затем в .htaccess и в последнюю очередь проверяется указание на вывод ошибок непосредственно в скрипте PHP. Преимущество включения/выключения отображения ошибок заключается в том, что файл '.htaccess' всегда под рукой и в отсутствии необходимости перерывать код в поисках инструкций. После отладки необходимо не забыть закомментировать данную инструкцию и настроить логирование.

    .htaccess:
    1
    php_value display_errors 1# отображение всех ошибок и предупреждений

    08
    Переменные сервера

    ​Переменные сервера могут содержать много полезной информации, которую можно и нужно использовать для построения правил. Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Примерный список этих переменных можно посмотреть здесь. Записи в этом массиве создаются веб-сервером, и нет никакой гарантии, что Ваш веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные выше. Тем не менее, многие эти переменные присутствуют в спецификации CGI/1.1, так что вы можете ожидать их наличие.

    Узнать, какие переменные передает конкретный сервер вместе со значениями можно вызвав функцию 'phpinfo();'.

    09
    Отключение кэширования (актуально при разработке на php7)

    ​ В php7 кеширование включено по-умолчанию, что может помешать при написании кода. Для отслеживания правок в реальном времени кеширование следует отключить.

    .htaccess:
    1
    2
      php_value opcache.enable off# отключение кеширования опкодов
      
    php_value xcache.cacher off# отключение использования прекомпилятора XCache