Разработчикам сайтов известно о полезности и много-функциональности файла .htaccess. С помощью этого файла можно осуществить различные полезные настройки. Достаточно задать определённую команду лишь в этом файле на сервере, и все функции и настройки сайта кардинальным образом изменятся. Если перефразировать известную народную мудрость так: “Один в поле воин”, то к файлу .htaccess это будет относиться в первую очередь.
О том, что такое файл .htaccess можно почитать здесь: Что такое файл .htaccess и как его создать.
В этой статье хотелось бы обратить внимание на одно полезное правило для Вашего сайта. Это правило убирает расширения файлов из URL (адресной строки браузера). Такое правило можно с лёгкостью организовать при помощи .htaccess, добавив в этот файл лишь несколько строк кода.
Это может пригодиться для того, чтобы сделать адреса Ваших страниц в интернет-браузерах пользователей более красивыми и привлекательными. Например, URL: http://vdblog.ru/about
, смотрится более эстетично, чем URL: vdblog.ru/about.php
.
Таким образом, из адресной строки браузера, которую видят Ваши посетители можно убрать любое расширения файлов, прописав в файле .htaccess следующий код:
1 2 3 4 | RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php |
Просто замените расширение файла: php, на своё расширение, допустим: html.
Загружайте файл .htaccess в корневую директорию Вашего сервера, и .htaccess уберёт из адресной строки расширения которые Вы указали.
Только перед тем как что то менять в файле .htaccess, обязательно делайте резервную копию этого файла, на случай если что то пойдёт не так. Будьте внимательны с .htaccess, без наличия определённых знаний с этим файлом шутки плохи, можно полностью нарушить работоспособность Вашего сайта.
💡 спасибо, очень долго искал и наконец-то среди кучи хлама ЧПУ нашел нормальный рабочий код для скрытия расширения.
У меня denwer и почему то не прокатывает это с ним
.htaccess лежит в каталоге с файлами, где нужно скрывать расширения:
сейчас
site.ru/engine/file.php
а нужно
site.ru/engine/file
а по хорошему вообше
site.ru/file
savedata, я всегда на реальном хостинге все манипуляции с .htaccess совершаю, так как denwer не всегда позволяет сделать задуманное.
А у меня и на нормальном хостинге не работает 😆
Может кто знает в чем дело? ❓
chaccess, всё должно работать. Ищите ошибки в .htaccess, или обратитесь к хостинг-провайдеру.
То есть если я просто вставлю этот код в .htaccess все должно работать? Больше ничего не должно быть написано?
chaccess, вообще да, должно работать. По крайней мере, у меня это прописано в .htaccess на некоторых сайтах, которые сделаны из страниц которые физически лежат на сервере. Я просто убрал расширение php. И ссылки должны быть такого же вида. Например убираем из ссылки: contacty.php расширение php, то и в коде должна стоять ссылка без php, т.е. :contacty.
«chaccess, всё должно работать. Ищите ошибки в .htaccess, или обратитесь к хостинг-провайдеру.»
Какие могут быть ошибки если я скопировал код, который написан в этой статье?)
chaccess, напишите в саппорт хостинга, они должны помочь.
Ок. Спасибо)))
А что скажете по поводу индексации? Если страницы с расширением уже в поиске, то как быть без расширения? Они повылетают получается?
Александр, может и не по-вылетают, но путаница может возникнуть, пройдет довольно долгое время чтобы тот же яндекс переклеил эти страницы, это же уже совсем другая страница получается по мнению поисковиков. Поэтому все махинации с расширением лучше делать до того как начнется продвижение сайта.
Спасибо автору статья очень интересная, давно искал!
есть пара вопросов
1. каким должно быть имя у файла htacces,
такое — «.htaccess» или такое — «имя.htaccess»
2. хотелось бы понять что означают эти знаки препинания
!-d, -f, ^(.*)$ $1
Григорий, имени у того файла нет, он просто .htaccess и всё.
В сети полно информации о синтаксисе регулярных выражений, т.е. этих знаков препинаний о которых вы говорите.
Например:
Круглые скобки () используются для выделения групп символов. В дальнейшем к ним можно обращаться по номеру.
Символ ^ обозначает начало строки.
Символ $ обозначает конец строки.
Символ . обозначает любой символ.
Символ | обозначает альтернативу. Например, выражения «A|B» означают «A или B».
Символ ? ставится после символа (группы), который может как присутствовать, так и отсутствовать.
Символ * ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
Квадратные скобки [] используются для перечисления допустимых символов.
Квадратные скобки [^] используются для перечисления недоступных символов.
Символ \ ставится перед спецсимволами, если они нужны в своем первозданном виде.
Все, что расположено после символа ‘#’, считается комментарием.
Вот у меня работает
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L,QSA]
RewriteCond %{THE_REQUEST} ([^\s]*)\.php(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]
Вот спасибо огромное… Помог только Ваш код, больше ничей!!
Спасибо огромное!! Последний вариант просто спас. уже пол инета перелопатил, решил попробовать последний вариант кода. и о, чудо! прокатило!! Олег, спасибо!
Спасибо, все работает, с первого раза все пошло
Ваши правила для htaccess не работают!
Если сделать всё как описано в статье, то всё должно работать. Правила могут не работать, из за настроек хостинга, проверьте это. Или свяжитесь с вашим хостером.
Данное правило возможно обкатать только непосредственно на самом хостинге? На локальном сервере работать не будет?
На локальном сервере я не пробовал, хотя думаю должно работать. Когда делал сайт на заказ, проверял только на хостинге.