- Особенности и секреты правильной настройки файла .htaccess
- Как правильно настроить .htaccess и зачем это нужно
- Прописываем htaccess правильно
- 1.Настройка ЧПУ
- 2.Настройка свойств PHP
- 3.Кэширование данных
- 4.Настройка редирект в htaccess
- Как правильно сделать 301 редирект в htaccess
- 5.Настройка 404 ошибки в htaccess
- 6. Настройка редиректа на https в htaccess
- 7.Управление доступом
- Ошибка 404 на htaccess
- Редирект 404 на htaccess
- Ошибка 404 htaccess
- Как указать страницу ошибки 404 на htaccess
- Решение проблемы 302 перенаправления при ответе 404
Особенности и секреты правильной настройки файла .htaccess
1,642 просмотров всего, 2 просмотров сегодня
Успешность развития и продвижения интернет-проекта во многом зависит от правильной адекватной работы сервера, на котором расположен сайт. Сейчас большинство использует Apache – в основном, из-за простоты настройки и большого количества предоставляемых возможностей. Настраивать его работу можно как в главном конфигурационном файле, так и с помощью .htaccess. Расположенные на сервере в отдельных папках, они указывают ему, как именно действовать в данном подкаталоге.
Правильная настройка htaccess дает возможность отдельно настроить редиректы на сайте, прописать внутренние изменения url, добавить авторизацию по паролю и др. О том, как это можно сделать, поговорим далее.
Как правильно настроить .htaccess и зачем это нужно
Владельцы сайтов, которые пользуются услугами виртуального хостинга, доступа к httpd.conf чаще всего не имеют. Поэтому единственным способом управления сервером для них будет настройка файла htaccess.
По сути и по структуре, он напоминает httpd.conf. С одним отличием: прописанные в htaccess директивы будут действовать только на тот каталог, в котором расположен этот файл. А также на подчиненные папки и файлы. Но действовать они будут точно так же, как директивы глобального файла конфигурации. То есть, для каждого каталога можно указать отдельный файл .htaccess с нужными настройками, не меняя при этом глобальных настроек сервера и не обращаясь за помощью к хостеру.
С помощью директив, прописанных в конфигурационном файле, пользователь или владелец сайта получает возможность настройки:
- ЧПУ.
- Опций PHP.
- Кэширования.
- Редиректов.
- Обработки ошибок 404.
- Перенаправления на https
- Управления доступом и пр.
Правильный файл htaccess значительно упрощает и оптимизирует работу с сайтом, дает возможность влиять на выдачу, сформированную сервером.
Прописываем htaccess правильно
Синтаксис директив файла конфигурации достаточно прост.
При написании пары команд и их опций обязательно разделяются пробелом:
Команда параметр1 параметр2 флаги
Помимо команд можно использовать вложенные структуры, необходимые для активации либо проверки доступности отдельных модулей.
Обратите внимание, что несоблюдение синтаксиса может привести к появлению ошибок сервера. Правильный htaccess должен быть написан с соблюдением следующих требований:
- Путь к файлу или директории указывается от корня сервера:
/home/mdhscyhq/public_html/ - Домен прописывается с указанием протокола:
Redirect / https://yoursupersite.ru - Название файла должно содержать «точку»:
.htaccess - Файл должен записываться в формате UNIX.
Путь от корня можно спросить у администратора сервера или посмотреть самостоятельно. Для этого достаточно запустить на сайте функцию PHP–phpinfo и посмотреть значение doc_root.
1.Настройка ЧПУ
ЧПУ, или человеко-понятный урл, положительно (хоть и незначительно) влияет на релевантность страницы сайта запросу пользователя с точки зрения поискового робота. А значит – повышает позицию выдачи в поиске. А еще более удобен для пользователя при навигации.
Сравните:
http://yoursupersite.ru/index.html?id=4
и
http://yoursupersite.ru/razrabotka-sayta/
В последнем случае сразу становится понятно, на какой странице мы находимся и какую информацию можно на ней получить.
В ЧПУ можно прописать ключевые слова или фразы: кириллицей или транслитом.
Вот так, к примеру, из стандартного url:
tovar.html?id=101
с помощью изменений настроек ЧПУ в htaccess можно сделать вполне понятный url:
tovar-101.html.
Или создать древовидную структуру url: category/tovar-123.html
2.Настройка свойств PHP
Даже если хостер закрыл доступ к php.ini, но вам обязательно необходимо изменить некоторые свойства PHP, это можно сделать с помощью файла htaccess.
Пример:
Директивы:
upload_max_filesize позволяет выполнить загрузку файлов размером до 32Мб (по умолчанию – до 16Мб).
post_max_size увеличивает размер постинга до 10Мб (стандарт – 2Мб).
max_execution_time позволяет использовать сложные скрипты, на выполнение которых необходимо более чем 30 стандартных секунд.
3.Кэширование данных
В файле htaccess можно выполнить настройку кэширования, если по каким-либо причинам это невозможно организовать с помощью синтаксиса PHP. В таком случае для ускорения загрузки данных с сервера можно применить следующие модули:
- mod_headers — дает возможность устанавливать в заголовке ответа сервера разные правила кэширования для файлов различных типов.
- mod_expires — отвечает за срок «устаревания» файлов, время, по истечении которого, файл будет помещен в кэш браузера.
При схожем смысле модули имеют разный синтаксис. Допускается использование любого из них (выбор зависит от того, какой установлен на сервере).
4.Настройка редирект в htaccess
Настройка файла htaccess позволяет выполнить простую и сложную переадресацию url. То есть, вы можете перенаправить пользователя на другой адрес глобально:
или при запросе отдельных страниц на сайте:
Правильный редирект в htaccess имеет следующий синтаксис:
Существует несколько несложных правил, которые стоит соблюдать при настройке переадресации через htaccess:
- Редиректы страниц в файле нужно располагать от более частных (вверху страницы) к глобальным. То есть сверху вниз.
- Необходимо избегать двух и более последовательных редиректов, т.к. это увеличивает время ответа и негативно оценивается поисковыми роботами.
Как правильно сделать 301 редирект в htaccess
В случае переноса сайта на новый домен или смены CMS возникает необходимость перенаправления пользователя со старых url на новые адреса. Редирект с номером ошибки 301 (Permament Redirect) сообщает роботу о том, что документы и страницы были перемещены на постоянной основе. Это позволяет сохранить позиции сайта в поисковых системах, сохранить ссылочную массу и PageRank.
Настройка 301 редиректа в htaccess может быть выполнена различными способами, в зависимости от предустановленного ПО и поставленных целей.
Самый простой вариант:
Недостаток этого метода состоит в том, что необходимо по отдельности перечислить все адреса, с которых и на которые будет осуществляться перенаправление. Поэтому для более сложных редиректов лучше использовать модуль mod_rewrite, который позволяет выполнить любой тип преобразования url и при этом настроить зависимость преобразования от ряда условий и факторов.
Вот так, к примеру, можно выполнить перенаправление со страниц, url которых заканчивается слешем, на страницы без слеша:
А так каждая страница старого домена перенаправляется на страницу с аналогичным url на новом домене:
5.Настройка 404 ошибки в htaccess
Удалили или перенесли страницу с сайта? Пользователь, перейдя по ссылке в поисковой системе или вводя неправильный url, увидит сообщение об ошибке 404. И, скорее всего, закроет вкладку.
Чтобы этого не произошло, более правильным будет отдельно настроить редирект 404 в htaccess и перенаправить посетителя на главную страницу сайта:
Однако это не всегда такое решение оправдано. Маркетологи рекомендуют создавать отдельную страницу «Not Found», которая будет работать на увеличение конверсии. Подробнее о дизайне страницы «Ошибка 404» можно почитать здесь. А перенаправить пользователя на нее можно с помощью следующих настроек в htaccess:
Аналогичным образом можно настроить вывод сообщений об ошибках:
6. Настройка редиректа на https в htaccess
Использование сертификата безопасности SSL и протокола https обеспечивает более безопасное соединение и достаточно высоко ценится поисковыми системами при ранжировании. Чтобы перенаправить всех пользователей сайта на этот протокол и тем самым обеспечить надежность передачи данных, достаточно внести в файл htaccess следующие настройки:
7.Управление доступом
В файле htaccess с помощью специальных директив можно ограничить доступ расположенным в текущей директории файлам и папкам:
Владелец или администратор сайта может разрешить доступ пользователям с конкретного IP-адреса. Это выполняется следующим образом
При необходимости, можно ограничить или даже запретить доступ к файлам и папкам каталога по IP. Выполняется это с помощью следующей директивы:
Ошибка 404 на htaccess
Сегодня хочу поднять тему создания 404 ошибки средствами apache через файл .htaccess . Я уже расказывал вам о том, как можно создать ошибку 404 на php, а так же о том как сделать 301 редирект на htacces, — пришло время рассказать о htaccess 404 ошибка. В этом уроке попробуем сделать htaccess 404 redirect таким образом, чтоб ошибка 404 была видна сразу, без 301 и 302 редиректа и без использования PHP, чтоб не нагружать его.
Редирект 404 на htaccess
Это не опечатка, действительно ошибка 404 создается аналогично 301 редиректу в .htaccess но с некой оговоркой.
Предположим, что у нас на сайте есть ненужные ссылки с GET параметрами, например ваш_сайт/?more=1 и мы хотим запретить их показывать отдав ошибку 404 в ответ.
Забрасываем этот код в файл htaccess в корне вашего сайта WordPress и смотрим результат:
Вот так вот, браузер получает ошибку 404 через redirect. Аналогичное сообщение получит и поисковый бот и через время выбросит этот url из своего кеша.
Если вам нужно заблокировать какую нибудь страницу WordPRess, например ваш_сайт/privet-mir/, можно написать код вот такого плана:
Результат работы предсказуемый:
Я тестировал этот результат только на CMS WordPress, если у вас не получается использовать 404 редирект htaccess на другой системе управления не стоить расстраиваться, по всей видимости код для них может быть похожий. Как альтернатива попробуйте вот такой код:
Он не работает на вордпресс, но работает на сайтах без системы управления контентом.
Ошибка 404 htaccess
Если вы внимательно тестировали результат работы, то наверное заметили вот эту дурацкую ошибку:
Как указать страницу ошибки 404 на htaccess
Для того, чтоб указать какая страница отвечает за обработку 404 ошибки мы можем написать вот такой код перед вызовом нашей ошибки:
Полный код будет выглядеть приблизительно вот так тогда:
И тут как говорится за что боролись, на то и напоролись:
Перед ошибкой 404 мы получаем ошибку 302 и это как говорят СЕО шники очень плохо. В общем если ваш заказчик не СЕО специалист этот вариант прокатит, в альтернативном варианте надо использовать PHP для генерации ответа. Об этом я писал вот здесь: 404 c php
Если мне удастся решить проблему с htaccess 404 redirect 302 я обязательно напишу вам об этом в этой же теме. На данный момент решение проблемы не найдено. Решение есть, описал его ниже.
Аналогично можно было не придумывать каруселей и сделать 404 редирект на htaccess через 301 редирект, разницы по сути никакой, только проще и быстрее:
По сути задача сделать саму ошибку 404 превратилась в банальное перенаправление на 404. Будем искать варианты.
Решение проблемы 302 перенаправления при ответе 404
Возможно мой код покажется вам громоздким, но единственный способ, который я смог придумать для того, что удалить 302 редирект перед ошибкой 404 — и выглядит это дело вот так:
В корне сайта создаем файл «error.html» и туда забрасываем хтмл код, который генерирует ваш сервер WordPress. Вот результаты работы:
и вот же правильная страница ошибки без редиректа 302:
Теоретически на этом все. Теперь вы знаете как делается ошибка 404 на htaccess.
Если вы имеете другие решения htaccess 404 redirect или перенаправление на 404 без редиректа 301 и 302 буду рад вас выслушать. Обращайтесь, пишите комментарии, жмите лайк.
а у меня вроде работает такой редирект:
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ — [L,R=404]
ErrorDocument 404 /404.shtml
Но почему то тольок для главной страницы. На другизх страницах, после такой вставки почему-то портится дизайн сайта, т.е изображение и другие кажись стили слетают. Почему так? На главной странице вроде всё ок.
Помогите справиться с проблемой. Есть сайт, который сейчас работает на wp, до этого работал или на джумле или на opencart. Остались хвосты в виде url сайт/?route=product/category&path=44
требуется все эти хвосты перевести в 404.
Пробовал добавить в .htaccess такой код:
RewriteCond %
RewriteRule . — [R=404,L,NC]
но это не помогает, все равно 200 ОК отдает.
Добрый день.
Если все правильно, то этот код должен работать, только его нужно добавлять в самом верху и вы забыли о ErrorDocument 404 /error.html надо еще создать файл с ошибкой в корне, error.html хотя бы для теста.
Если не будет работать то этот вариант точно вам поможет
RewriteCond %
RewriteRule ^(.*)$ http://%
будет редирект вместо 404
главное писать код в самом верху файла хтацес.
Если нет то есть еще пхп ответ 404 вот тут о нем писал https://help-wp.ru/seo-wordpress-kak-otpravit-oshibku-404-s-php-chasti/
писал вот такой код полностью.
RewriteCond %
RewriteRule . — [R=404,L,NC]
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ — [L]
RewriteCond %
RewriteCond %
RewriteRule . /index.php [L]
и не хочет гад.
Не сочтите за наглость, приведу конкретный пример.
вот этой странице нужно прописать 404.
да код вроде правильный, но в самом верху не хватет строчки ErrorDocument 404 /error.html ну и собственно сам файл в корне создайте.
Если не помогает можете открыть header.php вашей темы и забросить в самый верх вот такое:
ПРивет очень круто искал долго решения. Но почему то оно мне не помогло идет все равно редирект на главную. Ситуация следующая сайт спамят беками на страницы моего сайта — site.ru/?page=(-url-) (все время разные сайты). Использовал код # BEGIN WordPress
RewriteCond %
RewriteRule . — [R=404,L,NC]
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ — [L]
RewriteCond %
RewriteCond %
# END WordPress
# END WordPress
Но при переходе на страницу site.ru/?page=(-url-) почему то переход идет на мою главную страницу. Подскажите может чтото сделать или кто-то знает. Спасибо.
Добрый день.
Вы видимо эту часть упустили ErrorDocument 404 /error.html
+ у вашем случаи не важно будет там 301 или не будет, можно смело через 301 редирект то же самое делать, на страницу вашсайт/404 или любую другую, хотя должно и через ошибку 404 получится
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ — [L]
RewriteCond %
RewriteCond %
ErrorDocument 404 /error.html
RewriteCond %
RewriteRule . — [R=404,L,NC]
RewriteRule . /index.php [L]
Не работает)
Поставил 301
Redirect 301 /?page=http://(-url-) (-url-)
Также все равно на главную.
Ваш код должен быть выше ВП — шного.
Больше ничего не подскажу, так как чтоб понимать больше нужно смотреть конкретный сайт изнутри.
Здравствуйте.. понравилась статья..но у меня другой вопрос. Блог на ВП, а как сделать чтобы переводило на ошибку 404 со страниц с регистром HTTPS ..Просто у меня не получилось из-за сложности шаблона перейти на этот регистр но Яндекс уже успел проиндексировать и склеить зеркала, и теперь пользователи переходя по ссылке с поисковика натыкаются на фразу «Соединение не защищено» и т.п. а так хотя бы на блог с предложением других статей попадали (у меня так настроена при ошибке 404) ..Спасибо за ответ.
Добрый день.
Я никогда такого не делал и сейчас нет времени тестировать, но мне кажется вот такой вариант в htaccess должен работать.
Предположим что у вас за 404 отвечает страница вашсайт/404/, вы хотите чтоб она была без http, код ниже должен работать но я не уверен, может и не работать:
RewriteEngine on
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ http://%
ну или в этом направлении нужно двигаться. Там единственный момент что ВП может вмешаться и все равно менять на https и тогда будет зацикливание
php_flag register_globals on
RewriteEngine on
RewriteRule ^([-,0-9,a-z]+)$ /index.php?area=1&p=static&page=$1
Стандартное сообщение с перенаправлением на главную
Если вместо $1 вставляю new404, то все ссылки идут только на неё.
Помогите, пожалуйста, задействовать при ошибке 404 перенаправление на new404 и убрать стандартное сообщение.
Немного не понял что вам нужно сделать. Пробовали код вставлять из этой статьи, он 100% рабочий под ВП я проверял.
index.php?area=1&p=static&page=new404
Поставил, но на него реагируют только ссылки с любым или несуществующем расширением.
У меня страницы без расширения вызываются.
У меня Koobi.
Мне нужно перенаправление на (-url-)
ErrorDocument 404 /index.php?area=1&p=static&page=new404
Оказывается, что проблема состоит не в том, чтобы корректно настроить правила в конфигурационном файле .htaccess , а в том, что при запросе несуществующих страниц на сайте вместо 404 кода отдается 200
остается только скомбинировать ваш хтаццес и этот ответ
У меня страницы tpl.
При вставке ПХП получается
Выше Вы показали пример, как отдать ошибку 404 странице с урлом типа «/?more=1»
А подскажите пожалуйста, что нужно прописать в .htaccess, чтобы ошибка 404 присваивалась не только «/?more=1», а всем страницам, содержащим в себе идентификатор «/?more=».
То есть, и «/?more=1», и «/?more=2», и «/?more=3» и так далее.
Добрый день.
Все остается как есть, только меняем первую строчку с такого варианта
Если посмотреть документацию, то .* это любое количество любых символов 🙂
Будьте добры, как сделать, чтобы вместо главной страницы при любом ошибочном урл был код 404. Я понимаю, что в Hhtaccess надо прописывать конкретную страницу? А что делать в моем случае?
Добрый день.
О какой ЦМС мы сейчас говорим? — если ВП то он автоматически это делает, ничего никуда не нужно прописывать
Не знаю с какого источника вы нашли этот пример, но он реально работает. Получается чистая ошибка 404 на htaccess без редиректов и ошибок 302. Большое вам спасибо.
Да вы я смотрю прям извращенец. Всякое встречал, но чтоб через такую за. цу делать ошибку 404 еще не видал.
Не проще из пхп послать код 404 .
1) У меня нет .htaccess
2) Как сделать так, чтобы при переходе на не известную ссылку сайта, допустим: (-url-) — выдавала страница 404.html. У меня открывается, но только с такого: (-url-). А я хочу чтобы выдавала на всех длинных неизвестных стр. как допустим: (-url-). -Понимаете?
Что можно в код добавить? (Пробовал добавить такие как в конце: . -не пойдет.)
Добрый день.
Никто не мешает создать файл .htaccess Создавать нужно в корне сайта. Винде может не понравится такое имя, лучше воспользоваться или панелью хостинга или тоталом или файлзилой.
Если у вас ВП то решение проблемы в последнем абзаце
Только privet-mir замените на свое bla.
Если не ВП то используйте 301 редирект
1) .htaccess с панели сервера не создается, точнее создается, но она сразу исчезает. (создаю новый файл > переименовываю > сохраняю, а она выдает ошибку) — ОК.
2) Созданный файл с компа на NotePade++ — .htaccess при переносе на Cpanel > Pablic. — Тут же исчезает, искал во всех папках, и не нашел.
3) Создал 404.html по другой схеме, но она работает только при переходе в неизвестную стр.сайта к примеру: 111.ru/sddfg — Здесь выдаст 404 файл, но если написать 111.ru/sddfg/fgb — то 404 файл не появляется. Пытался итак и так, но без результатно.
Вот тут https://help-wp.ru/seo-wordpress-kak-otpravit-oshibku-404-s-php-chasti/ описанно как сделаь ответ 404 на пхп. Думаю в вашей ситуации это единственно правильное решение. Нужно только найти кто принимает на себя неправильные страницы
Не плохое решение, автору респект. Сам хотел придумать и заставить WordPress правильно отдавать 404 ошибки на htaccess но чет не получалось. Собственно мудрил как и вы но не придумал что делать с 302 ошибой. По сути я вместо 404 получал 302 и это очень плохо, вам подтвердит любой нормальный сеошник. Это все равно что сделать запрет на директорию, она как бы есть но поисковики ругаются, хотя страницу можно закрыть и так :))))))
На пхп ошибка 404 делается намного проще. Зачем тогда выдумывать велосипед и делать ошибки 404 на htaccess ?? Какая в этом логика. С точки зрения СЕО 404 ошибка она и в африке 404, как не крути. Ведь так?