Skip to content

Instantly share code, notes, and snippets.

@Zlatov
Last active January 15, 2016 14:33
Show Gist options
  • Save Zlatov/1f5b9f0b886518123e09 to your computer and use it in GitHub Desktop.
Save Zlatov/1f5b9f0b886518123e09 to your computer and use it in GitHub Desktop.
htaccess
# #####################
# ## ##
# ## Кодировка ##
# ## ##
# #####################
# Кодировка
#AddDefaultCharset UTF-8
# Если mod_charset есть на сервере
<IfModule mod_charset.c>
# Отключаем перекодировку
CharsetDisable On
# Кодировка, в которой документы хранятся на диске
CharsetSourceEnc utf-8
# Кодировка по-умолчанию для данного сервера
CharsetDefault utf-8
</IfModule>
# #################
# ## ##
# ## Index ##
# ## ##
# #################
# Первостепенность поиска индексных файлов при указании директории
DirectoryIndex index.php index.html
# Запрещает (-Indexes) или разрешает (+Indexes) отображение содеримого директории.
Options -Indexes
# ######################################
# ## ##
# ## PHP переменные и обработка ##
# ## ##
# ######################################
# Само собой
php_flag register_globals off
# Волшебные кавычки для входных данных GET/POST/Cookie
php_flag magic_quotes_gpc 0
# Волшебные кавычки для данных, поступающих во время выполнения (из SQL, exec(), ...)
php_flag magic_quotes_runtime 0
# ######################
# ## ##
# ## Ошибки PHP ##
# ## ##
# ######################
# Запись ошибок в логи
php_flag log_errors on
# В какие логи писать, например,
# в том же месте ге скрипт с ошибкой: "php_value error_log PHP-errors.log", что не очень удобно
# или в одном файле на проект: "/path/to/public_html/PHP-errors.log" (с DOCUMENT_ROOT)
# под виндой "D:/path/to/public_html/PHP-errors.log"
php_value error_log /home/path/public_html/domain/PHP_errors.log
# Задание максимальной длины log_errors в байтах. Значение по умолчанию 1024. Установка значения в 0 позволяет снять ограничение на длину log_errors.
php_value log_errors_max_len 1024
# Определяет типы выводимых ошибок по маске
# "E_ERROR" - 1
# "E_WARNING" - 2
# "E_PARSE" - 4
# "E_NOTICE" - 8
# "E_CORE_ERROR" - 16
# "E_CORE_WARNING" - 32
# "E_COMPILE_ERROR" - 64
# "E_COMPILE_WARNING" - 128
# "E_USER_ERROR" - 256
# "E_USER_WARNING" - 512
# "E_USER_NOTICE" - 1024
# "E_STRICT" - 2048
# "E_RECOVERABLE_ERROR" - 4096
# "E_DEPRECATED" - 8192
# "E_USER_DEPRECATED" - 16384
# "E_ALL" - 32767
php_value error_reporting 2047
# Включает / выключает вывод ошибок в браузер (php_flag display_errors), если сайт рабочий ошибки нужно писать в логи
php_flag display_errors on
# Отключает / включает HTML тэги в сообщениях об ошибках. Ссылки на страницы с описаниями ошибок. За такие ссылки ответственны docref_root и docref_ext.
php_flag html_errors on
# #####################
# ## ##
# ## Остальное ##
# ## ##
# #####################
#
#ErrorDocument 404 /404/
#ErrorDocument 403 /404/
# ##############################
# ## ##
# ## Модуль mod_rewrite ##
# ## ##
# ##############################
# Если mod_rewrite есть на сервере
<IfModule mod_rewrite.c>
# Включаем модуль mod_rewrite выполняющий URL преобразования на лету.
RewriteEngine on
# Если системный администратор запрещает использование 'Options +FollowSymlinks' — не сможем ограничить использование mod_rewrite для отдельных каталогов, вместо этого изменения будут действовать на весь сервер.
# если с этой директивой выдает ошибку - комментируем (в зависимости от хостера)
Options +FollowSymlinks
# Устанавливает базовый URL для преобразований в каталоге.
RewriteBase /
# Блокируем доступ к файлам .htaccess
RewriteRule ^.htaccess$ - [F]
# 301 редиректы (перемещена постоянно) со страницы на страницу. Примеры:
# Работает
#RewriteCond %{REQUEST_URI} ^/i6\.html$
#RewriteRule ^.*$ http://www.zlatov.net/publication/import-chertejey-v-3ds-max-iz-autocad.html [R=301,L]
# Работает -http://www.zlatov.net
#RewriteCond %{REQUEST_URI} ^/i8\.html$
#RewriteRule ^.*$ /publication/import-chertejey-v-3ds-max-iz-autocad.html [R=301,L]
# Работает -/
#RewriteCond %{REQUEST_URI} ^/i9\.html$
#RewriteRule ^.*$ publication/import-chertejey-v-3ds-max-iz-autocad.html [R=301,L]
# Перенаправление адреса содеражащего текст "text" на страницу /404/
#RewriteCond %{QUERY_STRING} ^text.+$
#RewriteRule ^.*$ 404/
# Перенаправление с адреса без www на адрес с www.
# Перенаправление с явным указанием переменной:
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# Перенаправление вручную:
#RewriteCond %{HTTP_HOST} ^domain.ru [NC]
#RewriteCond %{HTTP_HOST} !^$
#RewriteRule ^(.*)$ http://www.domain.ru/$1 [R=301,L]
# Перенаправление с адреса с www на адрес без www:
#RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
#RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Убираем множественные слэши в середине запроса:
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule .* %1/%2 [R=301,L]
# Убираем множественные слэши в начале и/или в конце запроса:
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ [OR]
RewriteCond %{THE_REQUEST} ^[A-Z]+\s(.*/)/+\sHTTP/[0-9.]+$
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L]
# Добавляем слэшь в конце папок:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [R=301,L]
# Переадресуем /index.php* на / (для SEO, т.е. отсутствия дублей по index.php?category=contacts)
RewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php /$1 [R=301,L]
## Последнее перенаправление
## Если запрашиваем реальная папка или файл - ничего не делаем, иначе "заворачиваем" все запросы на index.php, который лежит в RewriteBase
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*)$ /index.php [L,QSA]
# Или для статического ЧПУ
# Админка
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin/([^/\.]+)/?$ /admin/index.php?category=$1 [L,QSA]
# Сайт
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ index.php?category=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/([0-9]+)/?$ index.php?category=$1&page=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?category=$1$section=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/([^/\.]+)/([0-9]+)/?$ index.php?category=$1$section=$2&page=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/\.]+)/([^/\.]+)\.html$ index.php?category=$1&element=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^theme/lorem/([^/\.]+)\.html$ theme/lorem/$1.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)\.html$ index.php?category=$1$section=$2&element=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php?category=404
</IfModule>
# Шпаргалка
# RewriteCond
# — условие, при котором срабатывают правила перенаправления.
# условий может быть несколько (по лдному в каждой строке), между условиями нужно ставить [OR] (в конце верхнего условия).
#RewriteCond … [NC, OR]
#RewriteCond … [NC]
# RewriteCond [flags]:
# 'nocase|NC' - регистронезависимо
# 'ornext|OR' - либо следующее условие
# '-d' является ли каталогом
# '-f' является ли обычным файлом
# '-s' является ли обычным файлом с ненулевым размером
# '-l' является ли символической ссылкой
# '-F' проверка существования файла через подзапрос
# '-U' проверка существования URL через подзапрос
# RewriteRule
# — основная директива преобразований.
# R[=code] - вызывает редирект.
# L - чтобы не преобразовывать текущий URL другими правилами преобразований.
# QSA - добавлять строку запроса.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment