php htaccess html как php
Пример настройки файла htaccess php
Примеры записей в htaccess: Индексный файл, Редирект с сохранением рейтинга страницы, Склеивание www и http, Создание ЧПУ или ЧеловекуПонятныхУрлов, Редирект всех файлов папки на один файл, Защита от хотлинков, Определение кодировки и многое другое!
Указываем индексный файл (который первым открывает при обращении к сайту)
Можно указать один или несколько файлов
Редирект htaccess php
Глобальный редирект(первый /) ВСЁ пересылаем на новый адрес http://www.newsite.ru/
Все обращения к katalog переадресуем на домен newsite.ru в раздел newkatalog
Редирект с сохранением рейтинга страницы
Редирект пользователя с конкретным ip
Конкретного пользователя (надоел он или нужно его переслать на внутренний раздел) с данным ip пересылает на страницу /out.html
Склеивание www и http htaccess php
Теперь даже если Вы наберёте в адресной строке www.yoursite.ru, то сервер перешлёт Вас на http://yoursite.ru
Создание ЧПУ или Человеко-Понятных-Урлов htaccess php
После добавления данной строки в .htaccess будут доступны два адреса для документа. Например: www.yoursite.ru/article.php?id=1 и www.yoursite.ru/article/1
В результате www.yoursite.ru/art.php?type=123 превращается в www.yoursite.ru/cat/type/123/:
Вот ещё частные варианты:
Статья с технически адресом www.yoursite.ru/article.php?id=1 теперь будет доступна со своим понятным человеку названием www.yoursite.ru/katalog-saitov.
Редирект всех файлов папки на один файл
Например вы больше не нуждаетесь в разделе сайта articles и хотите перенаправить все запросы к папке /articles на один файл /non-articles.php. Поможет код ниже
Защита от хотлинков htaccess php
Возможно Вам знаком такой вариант, когда изображения на сервер не закачивают, а используют просто ссылку на сайт. В результате для сайта-владельца изображения создаётся лишняя нагрузка трафик. Используем код ниже
Определение кодировки htaccess php
Дополнительные варианты самых популярных кодировок: UTF-8, Windows-1251, KOI8-R. В примерах рассмотрим самую распространённую UTF-8
Создание своих страниц ошибок
Видов ошибок на самом деле больше. Можете создать дополнительно и для них записи, опираясь на весь список |
Запрещаем доступ
Скорее всего Вы столкнётесь с тем, что часть файлов и директорий надо будет закрыть от общего доступа.
Php htaccess html как php
.htaccess (с точкой в начале имени) – это файл, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу. Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок.
Примечание
Если вы не знаете путь от корня сервера, то Вы можете его узнать, спросив у администратора сервера, либо можете посмотреть сами, запустив на сайте функцию PHP — phpinfo(). Она выведет на экран конфигурацию PHP в виде фиолетовых таблиц. В них Вам необходимо найти переменную doc_root и посмотреть ее значение — это будет путь от корня сервера до Вашей основной директории.
Глобальное перенаправление (редирект) на другой адрес:
Перенаправление (редирект) только при запросе определенных страниц:
redirect /company http://www.newsite.com/newcompany
redirect /forum http://www.newsite.com/newforum
При запросе страниц из каталогов company и forum будет произведено перенаправление на новые адреса.
Перенаправление (редирект) только посетителей с определенным IP-адресом:
SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR=»redir»
RewriteCond %
RewriteRule ^/$ /only_for_you.html
Если посетитель имеет IP-адрес 192.145.121.1, то ему будет открыта страница only_for_you.html.
Изменение названия индексной страницы:
DirectoryIndex index.html index.php index.shtml
Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.
Выполнять код PHP в файлах HTML
Обработка ошибок Apache
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
При возникновении этих ошибок посетитель будет перенаправлен на специально созданные страницы.
16 Answers 16
[Apache2 @ Ubuntu/Debian: use this directive]
Or, from comment below:
If your are running PHP as CGI (probably not the case), you should write instead:
In My Godaddy Server the following code worked
using H (Handler) flag:
Or you can add more extensions to the rule pattern seprated by a pipe | that you want to be parsed by php handler
Note : on some servers you will have to change php5 to php to get this example to work in handler string:
This is in edition to all other right answers:
and run/open this file in browser.
Important Note:
If you see blank page or Notice: Undefined index: REDIRECT_HANDLER
You need to add the following line into your Apache config file:
You also need two other things:
In your_site.conf file (e.g. under /etc/apache2/mods-available in my case), add the following lines:
Enable Rewrite Mod
Run this command on your machine:
After any of those steps, you should restart apache:
For anyone out there still having trouble,
try this (my hosting was from Godaddy and this is the only thing that worked for me among all the answers out there.
I think this is the best way to run php script on html and htm pages:
Normally you should add:
However for GoDaddy shared hosting (php-cgi), you need to add also these lines:
Godaddy support had me change it to:
Using @Marc-François approach Firefox prompted me to download the html file
Finally the following is working for me (using both):
I’m using PHP7.1 running in my Raspberry Pi 3.
In the file /etc/apache2/mods-enabled/php7.1.conf I added at the end:
On Dreamhost Servers you can refer to this page that at time of writing indicates you may use the following for php 7.2 with FastCGI:
Or if you are using php5 cgi (not FastCGI):
None of the answers posted here worked for me.
.htaccess PHP
Если вы хотите вести логи всех операций, выполненных с помощью mod_rewrite, можно активировать это с помощью следующей записи в httpd.conf:
Директивы модуля Mod_rewrite
Наиболее часто используемые параметры
Теперь все запросы к вашим старым URL-ам будут вызывать redirectold.php, который найдет новый URL и вернет 301 ответ с вашей новой ссылкой.
Редиректы в зависимости от времени
Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?
Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения STRING и =STRING мы можем производить редиректы зависящие от времени:
Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html.
Поисковые системы плохо относятся к дубрям страниц. Чтобы этого избежать нужно удалить(склеить) страницы вида http://ваш_домен/ и http://ваш_домен/index.php
Запрещение доступа в конкретную директорию
Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива, по умолчанию, не работает с регулярными выражениями, но их можно включить поставив символ тильды(
) в опциях директивы. Синтаксис следующий:
Определение кодировки
Определение кодировки, в которой сервер «отдает» файлы
Определение кодировки на загружаемые файлы
После окончания заведения всех логинов файл нужно загрузить на сервер.
Задаем собственные страницы ошибок
Индексация директорий и поддиректорий
Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.
Лично я предпочитаю переадресовывать с пустых директорий либо на главную страницу сайта, либо на какую-либо другую подходящую страницу. Например, директорию www.site.ru/pic/ можно переадресовать на www.site.ru.
Защита изображений от скачивания
Еще один варинат запрета доступа к картинкам с неразрешенных сайтов:
Поисковые машини и разного рода сканеры создают коллосальный трафик на вашем сайте. Нижеприведенный блок кода позволит запретить доступ ботам на сайт.
Отслеживание обращений к файлу robots.txt
PHPSESSID
Для отключения добавления PHPSESSID к URL вставьте в начало index.php:
Директивы кеширования
Запрет кеширования с помощью сервера Apache
Откройте файл конфигурации сервера Apache httpd.conf и раскомментируйте следующие строчки:
Будьте осторожны при кешировании, т.к. при изменении файла, пользователь может получить новый вариант только через 3 дня!
Как заставить html-страницы обрабатывать php-код?
Как разместить несколько сайтов на одном виртуальном хостинге?
Чтобы разместить два или более сайтов на одном виртуальном хостинге, вопреки отведенному вам тарифным планом количеству доменов необходимо в файле «.htaccess» прописать следующие строки:
Поиск страниц больше чем в одном каталоге
Иногда необходимо позволить веб-серверу искать страницы больше чем в одном каталоге.
Виртуальные хосты пользователей
Если Вы хотите предоставлять адреса www.subdomain.domain.ru для страниц пользователей, Вы можете использовать следующий набор правил для преобразования http://www.subdomain.domain.ru/path во внутренний путь /home/subdomain/path:
Повреждаются файлы при загрузке на сервер
Такое может происходить из-за установленного модуля в Apache. По умолчанию он блокирует в запросах строки с SQL аргументами и другими потенциально опасными командами.
Возможные сообщения об ошибке:
You don’t have permission to access /adm/index.php on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Оптимально снимать защиту только с той папки, в которой это необходимо, не убирая защиту со всего сайта.
Переменные сервера
Это переменные вида %
где NAME_OF_VARIABLE может быть строкой взятой из следующего списка:
HTTP заголовки: | соединение & запрос: | |
---|---|---|
HTTP_USER_AGENT HTTP_REFERER HTTP_COOKIE HTTP_FORWARDED HTTP_HOST HTTP_PROXY_CONNECTION HTTP_ACCEPT | REMOTE_ADDR REMOTE_HOST REMOTE_USER REMOTE_IDENT REQUEST_METHOD SCRIPT_FILENAME PATH_INFO QUERY_STRING AUTH_TYPE | |
внутренние сервера: | системные: | специальные: |
DOCUMENT_ROOT SERVER_ADMIN SERVER_NAME SERVER_ADDR SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE | TIME_YEAR TIME_MON TIME_DAY TIME_HOUR TIME_MIN TIME_SEC TIME_WDAY TIME | API_VERSION THE_REQUEST REQUEST_URI REQUEST_FILENAME IS_SUBREQ |
Эти переменные полностью соответствуют названным похожим образом MIME-заголовкам HTTP, и переменным сервера Apache или полям struct tm систем Unix. Те, что являются для mod_rewrite специальными включают:
Главная страница без дублирования
Все страницы-дубли будут склеены редиректом с кодом 301 с главной страницей – http://www.yoursite.ru/.
Дубли страниц без слэша в конце URL
Чтобы предотвратить ситуацию с индексированием страниц www.yoursite.ru/about и www.yoursite.ru/about/ как разных, ставим следущий код:
Со страниц без слэша будет установлен редирект на «слэшевые».
Сохранение(загрузка) файлов вместо открытия
Сжатие отправляемых страниц
Принудительная постановка замыкающего слеша
Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта.
Междоменное использование шрифтов для FireFox
Выполнять PHP в файлах JavaScript
Разложить файлы robots.txt, sitemap.xml и т.п. в папки доменов
Переадресация по языку
Защита картинок от скачивания по ссылкам на других сайтах
Включая переходы без REFERER, т.е. когда адрес указывают в строке браузера.
Только по сссылкам на чужих сайтах:
Блокировать пользователей с определенным рефером
Если вы не хотите, чтобы пользователи переходя с определенных сайтов попадали на ваш, вы можете это запретить.
bannedurl1.com и bannedurl2.com — примеры запрещенных сайтов.
Ограничение размера файла загрузки в PHP, максимального размера запроса и максимального времени выполнения скрипта
Объем загружаемого файла:
Максимальный размер запроса для загрузки в PHP:
Время выполнения скрипта:
Время для скрипта на разбор введенных данных:
Указываем для IE режим вывода
Установка заголовка X-UA-Compatible:
Установка Vary: Accept-Encoding
Для поисковой оптимизации, и уменьшения времени загрузки страницы, Google рекомендует установить заголовок Vary: Accept-Encoding
Заголовок ответа HTTP/1.1 Vary позволяет серверу указать, что закэшированный ресурс может использоваться без проверки только, если указанные в Vary заголовки совпадают с заголовками запроса. Значения: Accept-Encoding, Host, User-Agent, Accept-Language.
Общий файл картинки для всех доменов(глобальные алиасы)
Перенаправление на безопасное соединение https
Если вы используете https и хотите, чтобы все пользователи перенаправлялись на него, то вам поможет следующий код:
Доступ если установлена cookie с помощью htaccess
По этому же принципу можно закрывать сайт на профилактические работы для всех кроме админа.
Доступ к заголовкам «If-Modified-Since» и «If-None-Match» для реализации http 304 ответа
Следует заметить, что заголовки «If-Modified-Since» и «If-None-Match» не отправляются браузером, если в предыдущих запросах к данной странице он не получал в ответе веб-сервера заголовок «Last-Modified». Кроме того, при использовании в веб-приложении сессий с установками по умолчанию, указанные заголовки также не будут присылаться браузером. Для того чтобы избежать такого поведения браузера, необходимо перед запуском сессии выполнять функцию session_cache_limiter, передавая в качестве аргумента параметр ‘private_no_expire’:
Кроме этого дополнительную информацию по теме можно почерпнуть:
Попытка номер раз создать почти идеальный htaccess
.htaccess — наш герой
Профессионалы знают, что такое htaccess.
Тем кто собираются уйти с народ.ру на php-хостинг только предстоит узнать, что это такое.
Те кто только что установил свои первые jooml’у или wordpress срочно должны узнать о нашем герое — htaccess
Представьте, что вы купили себе хостинг и кажется, почти обрели счастье. Но однажды (а может быть дважды, а может и трижды) ваш сайт перестает отвечать на запросы. Начинает медленно грузиться и вообще вести себя странно. А виртуальный хостинг это такая хитрая штука, что помимо вашего сайта на этом сервере находится ещё два десятка других сайтов. Все они разные по мощности, организованности и трафику. И когда ваш сосед по случайности, а может и умыслу запускает на своем хостинге сложные или избыточные в алгоритмах скрипты, это отзывается и на вас.
Или другой пример. Скажем ваш ресурс начинает набирать популярность, но переезжать на выделенный сервер ещё рано, а мощностей VPS уже не хватает. Вас очень может выручить htaccess.
А ещё htaccess может решить некоторые вопросы с безопасностью вашего сайта.
1. Первой строкой задаем основные опции:
Использовать опции очень удобно, когда у вас нет доступа к конфигурированию Апача или нужны разные настройки Апача для разных сайтов на одном сервере.
Скажем, у вас есть вот такой путь /site/folder_one/subfolder/other/
В файле /site/.htaccess вы указываете:
В файле /site/folder_one/.htaccess указываете:
В файле /site/folder_one/subfolder/.htaccess указываете:
2. Немного SEO (куда же без него)
В этой части файла мы указали две склейки: мы склеили ваш_сайт и www.ваш_сайт Даже если пользователь наберет ваш сайт без WWW его перебросить 301 редериктом на www.ваш_сайт.
А также мы избавились /index.php в строке запроса. Если пользователь наберет www.ваш_сайт/index.php его перебросит (снова 301 редериктом) на www.ваш_сайт.
Теперь поисковики не будут путаться между www и не будут дублировать главную страницу в результатах индексирования вашего сайта. Гуглим СЕО склейки домена, если не понимаете зачем это нужно.
3. Кто в папке главный?
Если у вас папке есть файлы index.html и index.php (не знаю, зачем и кому такое было нужно, но не раз видел такое) то как указать серверу кто их них более индексный?
А ещё можно там указать скажем roosso.php и тогда набрав в строке запроса адрес сайт.бла/бла/бла/ вы увидете не index, а roosso
Первая строчка устанавливает часовой пояс. Например в Apache 2.22.22 был баг связанный с этой опцией. Функции времени в php не работали, пока не установишь часовой пояс.
Вторая строка это подпись сервера. Вы их не раз видели на всяких системных страницах типа 500ой ошибки или 403ей. Обычно там какая-нибудь техническая информация и почта вебмастера. Я предпочитаю даже в таких мелочах скрывать данные о софте на сервере. Коллеги параноики меня поддержат.
Угадайте, что делает третья строка?
5. Когда нет доступа к php.ini
Первая строчка разрешить загружать файлы размером до 32 Мегабайт. По умолчанию в php обычно это значение 8 или 16 мегабайт.
Второй строкой разрешаем постинг объемом до 10 мегабайт. По умолчанию это значение обычно 2 Мегабайта.
Третья строка устанавливает кодировку по используемую вашими скриптами. По своей сути она дублирует строку: «AddDefaultCharset UTF-8». Но я чаще прибегаю к установке кодировки именно через php.
Четвертой строкой изменяем лимит времени выделенный на выполнение скрипта. По умолчанию он обычно равен 30 секундам. Но иногда для выполнения каких нибудь сложных обработок требуется больше времени.
6. Типы файлов. Ловкость рук и ни какого мошенничества.
В моей практике случалось пару раз, что после какого либо обновления провайдером софта, слетали типы файлов. Хотя такое редко. За 10 лет, всего два случая. Но иногда мне нужно было заставить html работать как php. А иногда требуется научить апач различать типы файлов, которые ему неизвестно. (Как оказалось Апачу вообще мало что известно из редких типов файлов.) В такой ситуации нас спасет следующий код:
Первая строчка позволит нашим php файлам иметь расширение html, но выполняться как php. Полезно бывает во многих случаях. А в старые добрые когда поисковики индексировали ЧПУ лучше, такая строчка всегда приходила на выручку.
Мы можем переназначить, добавить или подменить любые типы файлов под удобные нам разрешения.
Кстати, вы можете легко написать к примеру вот такую строку:
и создаю в корне своего сайта файл alex.roosso внутри обычный php код. Это вроде как страница обо мне любимом. И в адресной строке она будет выглядеть как www.black-web.ru/alex.roosso (ссылка рабочая, можете посмотреть что это так).
Второй строкой указано, какие расширения файлов должны выполняться как cgi скрипты.
Третья, четвертая и пятая строки, на всякий случай уточняют мим-тип файлов с разрешением css, js, xml. Не путайте с присвоением заголовка в ответе сервера на запрос, как это сделано в первых двух строках.
Шестая строчка это участка, нужна если на вашем сайте есть скачиваемый для пользователей контент. Если добавить эту строку, то при обращении к данным файлам им будет предлагаться скачать их на компьютер, а не как это сейчас в современным браузерах куча плагинов, которые даже word открывают в браузере.
Седьмую строку я закомментировал. Это строчка в принудительно-добровольном порядке, будет все файлы с вашего сервера запустить как php. Её лучше использовать лишь в отдельных папках, при необходимости.
7. Знают взрослые и дети, что архивы меньше весят…
Полезно, когда ваши страницы загружаются быстрее. Поэтому люди и придумали архивировать файлы. А потом они ещё подумали и решили, что архивировать можно и страницы на сайтах и картинки. Причем делать это незаметно для пользователя, но существенно снижать трафик и ускорять загрузку страниц. Волшебные слова прозвучали, теперь обсудим, как это можно сделать.
Как видите мы должны перечислить mime type файлов, которые следует подвергать сжатию. Сюда можно добавить и видео и картинки, но толку это даст мало. Потому что jpeg или gif уже сами по себе являются сжатыми форматами. Также как avi или flv. Вы фактически нечего не выиграете указав их.
Второй менее популярный модуль это mod_gzip, Чтобы включить сжатие с его помощью добавьте вот такие строчки:
Данный модуль умеет работать с масками, что несомненно большой плюс. Да и синтаксис у него куда более гибкий чем у предыдущего. Но используют его реже. А по сжатию я даже не берусь судить, который из модулей лучше. Я сильной разницы не заметил при тестах.
8. А ещё быстрее можно?
Можно. Если применить кеширование страниц. У кеширования есть и плюсы и минусы, поэтому подходить к этому вопросу надо подготовившись. Для динамически обновляющегося сайт каждый 2-3 минуты, например популярного форума, нужно учесть, что пользователь должен видеть актуальную информацию. Но у любого сайт есть контент, который более или менее статичен. Например те же картинки, или файлы стилей. Поэтому нам потребуется по разному использовать кеширование различного содержимого на сайте. В html разметки мы всегда можем использовать meta теги. И через php мы может устанавливать заголовки ответа сервера. Остается вопрос, как быть с css, js, image и т.д. и т.п.
Помочь нам в этом могут два модуля: mod_headers и mod_expires которые могут установить заголовки в ответ сервера и подсказать вашему браузеру, что и как нужно кешировать. Один из модулей обычно стоит у провайдера, но как и в случае с любым модулем, который не входит в стандартную сборку Апача, 100% гарантии никто вам не даст. Поэтому снова во избежание 500й ошибки указывает условия для каждого из модулей.
Вот такой синтаксис у mod_headers. Думаю по комментариям ясно что к чему.
В данной секции я отключил кеширование php файлов. Хотя по моему мнению небольшой временной интервал кеширования им не повредит. 5-30 секунд, это интервал времени, за который мало что меняется. А многие пользователи любят пользоваться клавишей back (вернуться назад). Чтобы не загружать им страницу второй раз, а подхватить её из кеша, разумный интервал кеширования все же уместен.
Во второй секции где идут условия для mod_expires я именно так и делаю — для php ставлю небольшой интервал кеширования.
9. Правила вежливого тона…
В процессе модернизации своего сайта, мы часто оставляем хвосты ввиде ссылок, которые ведут на страницы, которые мы удалили. Иногда такие ссылки идут с других сайтов или из поисковых систем. Чтобы не терять пользователей вежливым тоном считается иметь собственные страницы для различного типа ошибок. Включая даже ошибки сервера. Например стандартное сообщение о 500й ошибки очень скучное и мрачное, и вряд ли вызовет у пользователя желание посетить вашу страницу ещё раз. Но в htaccess есть приемы, которые могут сделать даже эту страницу приветливей.
Для 400-х ошибок можно использовать и динамические страницы на php. А вот для 500 лучше сделать на html и js. Это часть ошибок обычно связана с ошибками сервера (в большинстве случаев) и php или cgi как правило в такой ситуации не работают.
Если вам лень делать столько страниц устанавливайте страницей ошибок главную страницу своего сайта или карту сайта.
Все это вы делаете исключительно для людей. Поисковым роботам плевать на то есть у вас страницы ошибок или нет. Они видят ответ сервера с кодом ошибки и блокируют вашу страницу в поиск. Так что имейте ввиду, это не панацея. Это лишь вежливость к вашей аудитории и имидж вашего сайта.
В результате всех манипуляций у нас должен был получить файл следующего содержания:
Я старался не спешить в написании статьи и на это ушли почти сутки. Но все же где то я мог допустить ошибки в орфографии или пунктуации. Прошу не казнить, а миловать. А лучше писать в личку, чтобы я поправил ошибки.
… Для тех у кого всё получилось, идём на www.webpagetest.org мерять красоту до и после.
Andrey_Zentavr