Полезные .htaccess правила



Иногда, при создании/редактировании .htaccess’a возникает необходимость изменить/добавить какое-либо правило. Но, не всегда помнишь точный синтаксис. И для того, чтобы не спрашивать каждый раз гугл, я собрал небольшую подборку чрезвычайно полезных и часто используемых правил и решений.

Убрать www из урла
Для удобства или для SEO, вы можете захотеть убрать (или использовать) www в адресе вашего сайта. Приведенный код убирает www из урла сайта и перенаправляет на адрес вида http://mysite.ru.

RewriteEngine On
RewriteCond %{HTTP_HOST} !^mysite.ru$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [L,R=301]

Автоматически устанавливать файлам кодировку utf-8
Один из вариантов избежать проблем с кодировкой — это создать .htaccess с таким содержанием:

<FilesMatch "\.(htm|html|css|js)$">
AddDefaultCharset UTF-8
</FilesMatch>


Убрать расширение файла
Расширения файлов могут быть полезны для разработчиков, но они абсолютно не нужны обычным посетителям вашего сайта. Приведенный ниже код удаляет .html расширение у всех html-файлов.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
# Вместь html может быть любое другое расширение: php, htm, asp

Запись php ошибок в лог-файл
Интересный способ записи ошибок выполнения скрипта. Просто создайте файл php_error.log у вас на сервере и укажите до него путь в последней строке кода.

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
# log to file
php_flag log_errors on
php_value error_log /location/to/php_error.log

Перенаправление со старого домена на новый
Перенаправляем посетителей со своего старого сайта на новый, используя 301 редирект.

RewriteEngine On
RewriteRule ^(.*)$ http://www.newsite.ru/$1 [R=301,L]

Изменяем некоторые системные значения
Данный трюк может срабатывать не всегда.

#Увеличиваем максимальный размер загружаемого файла
php_value upload_max_filesize 100M
#Увеличиваем максимальный размер файла передаваемого пост-запросом
php_value post_max_size 100M
#Увеличиваем время выполнения скрипта
php_value max_execution_time 700

Удалить подраздел/категорию из урла
Для того, чтобы изменить урл вида: http://site.ru/category/seo на http://site.ru/seo, дописываем в .htaccess следующий код.

RewriteRule ^category/(.+)$ http://www.yourdomain.com/$1 [R=301,L]

Свои страницы с ошибками (404, 403, 500, etc.)
Не нравятся дефолтные страницы с ошибками? Просто создайте для каждой ошибки свой html-файл и пропишите в .htaccess следующий код.

ErrorDocument 400 /errors/badrequest.html
ErrorDocument 401 /errors/authrequest.html
ErrorDocument 403 /errors/forbidden.html
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/servererror.html

Запрет выполнения php-скриптов
Данный код может быть очень быть полезен там, где вы храните файлы или картинки. Только, нужно запретить перезаписывать .htaccess.

php_flag engine off

Защита от хотлинкинга
Хотлинк — это включение в веб-страницу файлов-изображений или других ресурсов с чужого сервера. Для избежания этого злостного деяния используем следующий код.

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.ru/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]


    None Found

Теги:

Комментарии

  1. Хорошо бы еще перенаправление с без WWW на c WWW добавить : )

    Reply

    Max Reply:


    Надо изменить RewriteRule ^(.*)$ http://mysite.ru/$1 [L,R=301] на RewriteRule ^(.*)$ http://www.mysite.ru/$1 [L,R=301]

    Reply

  2. Полезно, спасибо!

    Reply

  3. У меня на сайте вирус-скрипт постоянно переписывает файл .htaccess( хотя закрыт от записи) добавляя код перенаправления на другие сайты , как можно вычислить, где он засел этот скрипт?

    Reply

    Max Reply:


    Сложно сказать, смотрите прежде всего файлы, которые подключаются на каждой странице. Конфиги и файлы шаблонов.

    Reply

  4. Евдокимов

    Не знаете, как не убрать расширение, а поменять php на html. Хочу при переезде сохранить существующие урлы.

    Reply

    Max Reply:


    Попробуйте так:

    RewriteEngine on
    RewriteRule ^(.*)\.html$ $1.php

    При обращении к файлу index.html, будет использоваться index.php и т.д.

    Reply

  5. Евдокимов

    Спасибо, но Битриксе в .htaccess не сработало.

    Reply

  6. Старые рекомендации, но они еще не скоро потеряют свою актуальность). Кстати, Max, почему вы не выкладываете свежие материалы на этот блог? Интересно пишете — легко читается

    Reply

Оставить комментарий