Parsing html as php htaccess: Parsing HTML files as PHP
(.*)$ http://site.ru/$1 [R=301,L]
Шпаргалка по .htaccess – База знаний Timeweb Community
Это не мануал, здесь собраны наиболее часто используемые настройки .htaccess, своего рода сборник подсказок.
Для чего нужен .htaccess
.htaccess позволяет создать собственную конфигурацию управлением сервера Апач в директориях или настройках хостинга.
Правила .htaccess распространяются на все директории, где расположен файл, кроме директорий, где расположен собственный .htaccess.
Файл .htaccess считывается сервером Апач при каждом обращении, поэтому все изменения входят в силу сразу, после изменения.
Глобальные настройки сервера Апач могут содержать запрет на исполнение некоторых команд, обычно это вызывает ошибку 500. Также подобную ошибку может вызывать неправильный синтаксис или ошибка, например пропуск пробела.
Запрет доступа для определенных IP-адресов или диапазонов IP-адресов
Запрет доступа с IP-адреса 123. 123.123.123.
Order Deny,Allow Deny from 123.123.123.123
Если не указывать последние цифры адреса, то запрет будет распространяться на весь диапазон 123.123.123.0 — 123.123.123.255.
Order Deny,Allow Deny from 123.123.123
Разрешаем доступ только с определенных IP-адресов
Order Deny,Allow Deny from all Allow from 123.123.123.123
Принудительное задание кодировки
Иногда требуется очистка кэша браузера.
Отмена перекодировки сервером
Создание собственных страниц с сообщениями об ошибках
При переходе, например, на несуществующий адрес, посетитель увидит сообщение сервера об ошибке, можно создать собственные страницы ошибок либо перенаправлять посетителя на другой адрес, как главная страница. Но для правильной индексации желательно не перенаправлять, а показывать страницу ошибки. (.*)$ — [F,L]
Бытует легенда, что происхождения названия сервера Апач происходит не от названия индейского племени. Когда сервер был еще в самом начале пути, группа энтузиастов небольшие дополнения к коду, патчи (англ – patch), и «a patchy server» превратилось в Апач, а знаменитое перо на логотипе появилось позже.
В материале перечислены наиболее часто используемые примеры, а большинство возможностей даже не упомянуто, как модуль mod_rewrite, предоставляющий множество возможностей.
Статья писалась эпизодическими «набегами», так что если увидите ошибку, поправьте.
Мой аккаунт на Marketplace — https://timeweb.com/ru/community/marketplace/bashkov-vladislav, обращайтесь
.htaccess
15.10.2014
Почему то на просторах рунета информация о локальной настройки веб-сервера Apache посредством конфигурационного файла .htaccess приводится как то не полно и однобоко. В основном приводятся примеры (часто не рабочие) или сухой перевод англоязычной документации.
А как же быть, если нужно настроить несколько редиректов, и совсем нет времени познавать всю мощь .htaccess? Единственный выход это брать готовые примеры, и наугад адаптировать под свои нужды. В этой статье я напишу краткое руководство по .htaccess, которое закроет большинство вопросов новичков. А также приведу ссылки на подробные инструкции. Эта статья будет дописываться по мере необходимости, начну с самого основного.
Редиректы
Редиректы осуществляются с помощью модуля mod_rewrite. Задаются правила преобразований в виде следующей конструкции:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
[СЮДА ПИШЕМ ПРАВИЛА]
</IfModule>
Правила преобразования записываются в таком виде:
RewriteCond [СТРОКА ДЛЯ СРАВНЕНИЯ] [УСЛОВИЕ] [ФЛАГИ]
RewriteCond [СТРОКА ДЛЯ СРАВНЕНИЯ] [УСЛОВИЕ] [ФЛАГИ]
RewriteRule [ШАБЛОН] [СТРОКА ПОДСТАНОВКИ] [ФЛАГИ]
Строки RewriteCond — задают условия для срабатывания следующего за ними правила RewriteRule. Условий может быть несколько, они накладываются по правилу AND. Но можно изменить правило на OR с помощью флага OR.
В качестве [СТРОКИ ДЛЯ СРАВНЕНИЯ] могут использоваться различные переменные.
Ссылка на полный список
Я приведу только те, которые нужны чаще всего:
%{REQUEST_URI} | Строка запроса (без доменного имени, и GET параметров), пример «/server/htaccess/» |
%{HTTP_HOST} | Доменное имя, например «max22.ru» |
%{QUERY_STRING} | Строка GET параметров |
[УСЛОВИЕ] также как и [ШАБЛОН] представляют собой perl совместимое регулярное выражение, с некоторыми дополнениями, позволяющими например проверить файл ли это, или существующий url.
[ФЛАГИ] Флаги пишутся в квадратных скодках через запятую: [NC,OR]. Флаги для условий:
NC | Регистронезависимая проверка |
OR | Условие сопостовляется с остальными про правилу ИЛИ |
Подвыражения в регулярных выражениях (заключенные в скобки), доступны для вставки в [СТРОКУ ПОДСТАНОВКИ], обращаться к подвыражениям нужно так: %N — для подвыражений в условиях (RewriteCond) и $N — для подвыражений в правилах (RewriteRule), где N — порядковый номер подвыражения.
RewriteRule — правило подстановки. Если запрос подходит под вышестоящие проверки и [ШАБЛОН], то применяется правило подстановки. Здесь регулировать поведение также можно с помощью флагов. Флаги есть разные, приведу наиболее часто используемые:
NC | Регистронезависимая проверка |
R=301 | Будет редирект с кодом 301, можно указать другой код |
L | Это последнее правило, больше не применять правил преобразований |
Надеюсь после моего краткого ввода в теорию, вам будет проще понимать что же написано в вашем .htaccess. Привожу ссылку на
очень хороший перевод про модуль mod_rewrite, там же можно найти другие хорошие переводы.
Внимание! Браузеры кешируют редиректы!!!
Причем обычные сочетания типа Ctrl+F5 или Ctrl+R не помагают. Я во время тестирования каждый раз открываю страницу в НОВОМ окне в режиме инкогнито. news/happy.* /news.html [L]
Иногда требуется, чтобы был редирект без смены адреса, т.е. реврайт без редиректа. Для этого просто не указываем флаг редирект (R), и получаем желаемый результат, теперь по адресу news/happy получим news.html, а в адресной строке останется news/happy
Редирект от GET параметров
Например, нужно что бы со страницы /?action=page&id=15 был редирект на /page/15/:
RewriteCond %{QUERY_STRING} action=page [NC]
RewriteCond %{QUERY_STRING} id=(\d+) [NC]
RewriteRule .* /page/%1/? [R=301,L]
Поясню, первым условиям проверяем что есть get параметр action=page, вторым условием проверяем что id равно числу. Эти условия нельзя объединять, т.к. параметры могут идти и наоборот, т.е.
index.php?action=page&id=15 и index.php?id=15&action=page должны быть равноценны. Но и наконец правило, там все обычно, кроме знака вопрос (?) на конце. $ /about/ [R=301,L]
Если мне кто — нибудь расскажет почему эти примеры работают крест накрест, а обратно не работают — буду очень рад.
что это такое, как правильно создать и настроить
Файл .htaccess – это специализированный служебный документ, использующийся для изменения настроек веб-сервера Apache и похожих серверов. Проще говоря, его использование поможет вам изменять работу сайта: настраивать доступ к папкам, файлам и прочим материалам, указывать правила переписи ссылок и предупреждения об ошибке. Вместе с этим вы не меняете функционирование всего сервера, настраивая лишь дополнительные параметры у некоторых пользователей.
Когда владелец сайта работает над своим проектом, обязательно придет момент, когда ему понадобится использовать файл .htaccess. Несмотря на его огромную важность, для многих вебмастеров, особенно новичков, он остается неизведанным, ведь, чтобы разбираться в нем, нужно хорошо знать не только SEO, но и программирование.
В этой статье мы поможем вам понять, зачем нужен .htaccess и как его настроить. Это очень важно, потому что он открывает гибкие возможности для владельцев сайтов, желающих обеспечить для своего ресурса надежную безопасность.
Возможности и для чего нужен
В данном файле сайтостроители могут:
- Настраивать директивы простого перенаправления (редиректы). Это позволит после смены домена отправить посетителя со страницы предыдущего сайта на новый проект.
- Переадресовывать с URL, где есть www, на домен без www. Или же на https после того, как установите ssl сертификат.
- Описывать ошибки. В их числе и ошибка 404 с заменой на необходимую страницу.
- Кэширование файлов. Делается с целью ускорения работы веб-ресурса.
- Создавать ЧПУ. Это «Человеко-понятные УРЛы», то есть, формируются ссылки, понятные для интернет-пользователей.
- Изменять исходный код страниц.
- Управлять доступом к файлам и директориям при помощи паролей.
- Задавать индексный файл.
- Открывать и закрывать доступ с определенных IP-адресов.
- Управлять поисковыми ботами на сайте.
- Настраивать директивы сложного направления.
Главное предназначение .htaccess – настраивать сайт и каталоги в соответствии с определенными требованиями. То есть, посредством этого файла, SEO-специалисты и программисты могут изменять настройки веб-сервера, даже не имея администраторских прав. Но изменения вносятся только для определенного сайта, и на сам сервер они никак не влияют.
Конфигурации сервера изменяются только с использованием директив (команд), включающих в себя «ключ» и «значение» для него. Все самые важные директивы, позволяющие управлять сервером, находятся в основном файле конфигурации, называющимся httpd.conf. Проблема в том, что у рядового пользователя нет возможности получить к нему доступ, так как там находится большое количество параметров, от которых зависит работоспособность всего сервера. Вот почему актуален .htaccess, позволяющий менять некоторые директивы в главном файле.
Все корректировки во вспомогательном файле действуют на весь каталог, в котором он расположен. И если загрузить данный документ в корневую папку сайта, то изменения коснутся всего ресурса.
Где находится .htaccess
Можно с легкостью проверить, есть ли у вас служебный файл. От многих других документов он отличается тем, что имеет только расширение в виде названия из слова, тогда как самого названия нет. Да, мы все привыкли видеть файлы с названием из слова, и расширением после точки, которое состоит всего из 2-3 букв. Но пустые названия позволяют делать файлы и папки «скрытыми», с открытым исходным кодом. Из этого следует вывод, что .htaccess для обычных пользователей остается невидимым, поэтому они не смогут его изменить.
Но есть у этого метода «скрытия» файла и обратная сторона медали. В стандартных FTP-клиентах на ОС Windows и Mac, документ очень часто остается невидимым для пользователей, из-за чего они ошибочно полагают, что его просто нет. Поэтому человек создает новый файл для внесения своих конфигураций, кодов для обработки ошибок, создания доступа к папкам и пр. Хорошо, что большинство хостингов оставляют место на диске, где htaccess-файл уже установлен автоматически.
Но если вы не найдете его, то попробуйте зайти в менеджер файлов, который встроен в ваш хостинг. В нем могут показываться скрытые файлы и директории. Ищите его в public_html, а затем с помощью установленного в программе текстового редактора откорректируйте и сохраните файл, после чего он загрузится на сервер самостоятельно.
Если вы не найдете документ по указанному пути, то создайте собственный. Может случиться так, что на экране появится ошибка. Значит, данный хостер запретил создавать служебный файл.
Недорогие хостинги зачастую запрещают клиентам создавать и изменять подобный документ. Таким образом они стимулируют пользоваться их услугами по более дорогостоящим тарифам, где это разрешено.
Как правильно создать .htaccess
Для этого вам понадобится самый обычный текстовый редактор, к примеру, Блокнот, который есть на любом ПК:
- Откройте Блокнот, ничего в нем не пишите.
- Выберите пункт «Файл» и нажмите «Сохранить как».
- Появится окно, где напротив пункта «Тип файла» выберите «All types» или «Все файлы».
- В строке «Имя файла» введите .htaccess и кликните на «Сохранить».
Далее перепроверьте, создан ли документ правильно. Обязательно посмотрите, не сохранили ли вы его как .htaccess.txt. Затем загрузите файл в корневую папку сервера, и если не отобразится ошибка 500, значит, вы все сделали правильно.
Отныне вы можете редактировать файл, что позволит вам управлять веб-сайтом более гибко.
Примеры использования
Рассмотрим самые популярные команды для .htaccess.
Редирект
Эти директивы используются с завидной регулярностью. Они позволяют перенаправить посетителя со старого URL на новую страницу. Это возможно благодаря 301-редиректу. Достаточно в код файла вписать:
Redirect 301 /старый_URL.html http://www.название_вашего_сайта.ru/новый_URL.html
В целом директива будет отображена в таком виде:
Redirect [status] URL_LOCAL URL_REDIRECT
URL_LOCAL – это старый адрес, с которого осуществляется перенос пользователя.
URL_REDIRECT – новый URL, куда переносится страница.
В поле [status] могут быть следующие значения:
- 301 – страница перенесена навсегда.
- 302 – страница перенесена на время.
- 303 – смотрите другую страницу.
- 410 – страница удалена.
Mod_rewrite (директивы сложного переноса)
Этот модуль содержится в Apache. В нем есть изобилие самых разных директив для расширенного управления адресами. К основным из них относятся:
1. Указание основного зеркала
Предназначен для того, чтобы преобразовать домен с www на URL без www. (.*)$ http://www.my-site.ru/$1 [R=301,L]
5. Запретные команды для поискового бота
В .htaccess, так же, как и в robots.txt, можно закрыть доступ к сайту для роботов поисковых систем:
RewriteEngine on RewriteCond %{USER_AGENT} Googlebot RewriteRule .* - [F] # F – выдает ошибку 403 – запрещено для сканирования
Обработка ошибок
Практически любой интернет-пользователь встречался с ошибкой 404 not found (страница не найдена или удалена). Но есть огромное количество других ошибок, о которых вы наверняка не слышали.
В служебном файле вы можете прописать файл для его отображения во время ошибки. Но предварительно необходимо создать тот же файл в html расширении, и прописать в нем, в чем заключается эта ошибка. Затем, в зависимости от используемой ошибки, внесите в кодировку .htaccess:
ErrorDocument 404 /siteerror404.html
Индексные документы
Когда посетитель заходит на сайт, сразу же открывается индексный файл index.xml. Вы можете заменить индексную страницу на любую другую, дополнив код:
DirectoryIndex name.xml
Либо добавить несколько таких страниц, и поисковик будет находить их в соответствующей последовательности:
DirectoryIndex index.html index.php index.pl
Указание кодировки
Данная функция нужна, чтобы текст отображался на экране пользователя правильно. Иначе вместо нормальной читабельной страницы он будет видеть непонятные символы. Сегодня широко распространена кодировка: Windows-1251 – Кириллица и UTF-8 – двухбайтовая кодировка. Для выбора кодировки в служебном документе, применяется директива:
AddDefaultCharset WINDOWS-1251
А чтобы в дальнейшем, когда вы будете загружать файлы на сервер, не возникало проблем, укажите, что все новые файлы будут преобразовываться в аналогичную кодировку:
CharsetSourceEnc WINDOWS-1251
Указание паролей для директорий
Для этого в закрываемом каталоге пропишите:
AuthName "Need password" #сообщение для запроса пароля AuthType Basic #тип аутентификации AuthUserFile /passwords/. psd #имя файла, содержащее пароли для входа Require valid-user #имя пользователей, которым открыт доступ
Доступ к файлам и директориям
Посредством файла .htaccess вы можете запретить полностью или частично доступ к определенным файлам. Допустим, вы хотите закрыть доступ к системному каталогу. Тогда в соответствующем .htaccess пропишите:
Deny from all
Для запрета просмотра определенного файла, например, test.php:
<Files test.php> deny from all </Files>
Открыть просмотр для конкретного IP, и при этом закрыть доступ остальным, позволяет команда:
<Files "passwd.html"> Order Deny,Allow Deny from all Allow from 12.345.678.90 </Files>
12.345.678.90 – пример IP-адреса (здесь нужно указать нужный вам IP).
Заключение
Как видите, служебный файл .htacces является одним из самых важных инструментов для полноценной работоспособности веб-ресурса. И ознакомившись с его возможностями, вы наверняка удивились, почему раньше знали об этом файле мало. Это эффективный инструмент для того, чтобы SEO-специалисты и программисты могли вносить изменения в конфигурации веб-сервера для определенных сайтов, не влияя на сам сервер.
Благодаря нему, владельцы интернет-проектов могут сообщить поисковикам и посетителям о смене домена и перенести их на новый, ускорить индексацию сайта, закрыть доступ ко всем или определенным данным ресурса, не допустить их корректировки и скачивания посторонними лицами, обеспечить доступ к определенным файлам по IP и паролю.
Как задать кодировку в htaccess
Вы здесь:
Главная — PHP — PHP Основы — Как задать кодировку в htaccess
Одна из самых частых проблем сайта — это его кодировка. И несмотря на это многие Web-мастера продолжают утверждать, что браузер сам выбирает кодировку. Действительно, он выбирает кодировку сам, но делает это не всегда правильно. Вот это и есть самая распространнёная ошибка с кодировкой: сайт в кодировке, допустим, UTF-8, а браузер настойчиво выбирает windows-1251. Вот как задать жёстко кодировку через файл htaccess, я расскажу в этой небольшой статье.
Для того, чтобы задать кодировку файла в htaccess достаточно написать в нём всего одну строчку:
AddDefaultCharset UTF-8
Если Вам нужна windows-1251, то тогда так:
AddDefaultCharset WINDOWS-1251
Всего одна строчка и теперь браузер, независимо от своего предпочтения, будет выбирать указанную кодировку. Сразу говорю, данный способ — это действительно мощный. Вы должны понимать, что раз браузер неправильно распознаёт кодировку Вашего сайта (игнорируя даже мета-тег «ContentType«), значит, на то есть свои причины, поэтому внимательно проверьте: везде ли всё хорошо отображается.
Надеюсь, что этой статьей я помог Вам решить проблему с кодировкой. А в следующей статье я расскажу о проблеме, связанной с кодировкой базы данных. Это тоже весьма частая проблема, которую многие не могут решить.
-
Создано 09.07.2011 16:32:47 -
Михаил Русаков
Предыдущая статья Следующая статья
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
-
Кнопка:
<a href=»https://myrusakov. ru» target=»_blank»><img src=»https://myrusakov.ru/images/button.gif» alt=»Как создать свой сайт» /></a>Она выглядит вот так:
-
Текстовая ссылка:
<a href=»https://myrusakov.ru» target=»_blank»>Как создать свой сайт</a>Она выглядит вот так: Как создать свой сайт
- BB-код ссылки для форумов (например, можете поставить её в подписи):
[URL=»https://myrusakov.ru»]Как создать свой сайт[/URL]
Как создать файл .htaccess и несколько полезных кодов
Для тех, кто еще не работал с данным файлом, предлагаю Вам основы, которые помогут Вам решить некоторые задачи. Сам по себе .htaccess, очень полезная штука. С его помощью Вы можете открыть или закрыть доступ, контролировать трафик и обезопасить свой сайт от вредоносных действий.
Как создать файл .htaccess
У некоторых сайтов уже по умолчанию есть .htaccess. Его создает система управления сайтом или как многие называют — движок. Тот же WordPress сам создает по умолчанию этот файл, который по сути пуст и в нем нет кода, только две строки с комментариями.
Если же у Вас нет такого файла, то вы можете с легкостью его создать. Он должен находится в корневой папке Вашего сайта. Вот несколько шагов в создании:
- 1. Открываем текстовый редактор или тот который используете для верстки, советую Notepad++, если же он Вам не знаком, то обычный Блокнот.
- 2. Ничего в нем не пишем и просто сразу сохраняем нажав на пункт меню «Файл», выбрать «Сохранить как».
- 3. В открывшемся окне, там где стоит выбор «Тип файла» выбрать «Все файлы» или «All files»
- 4. В строке, где нужно указать имя, нужно прописать .htaccess
- Нажать на кнопку«Сохранить», чтобы завершить создание.
Теперь Вы можете открывать его для редактирования и добавлять нужный код, чтобы иметь возможность управлять сайтом. Предлагаю Вам рассмотреть самые популярные команды для .htaccess, которые могут Вам пригодится, и с которыми приходилось сталкиваться мне.
Перед каждым редактированием .htaccess, сохраните его резервную копию, чтобы потом, в случаи не правильной работы сайта, вы смогли вернутся к исходному состоянию.
Как указать кодировку сайта в .htaccess
Если Вам нужно указать кодировку в .htaccess, то Вам нужно открыть его и добавить всего лишь одну строку кода, который укажет кодировку. Для UTF-8:
AddDefaultCharset UTF-8
для windows-1251:
AddDefaultCharset CP1251
Как запретить доступ к определенным файлам или самому .htaccess
Если у Вас возникла надобность нужда в том, чтобы запретить посетителям доступ к определенным файлам или .htaccess то добавьте следующий код:
<Files .htaccess> order allow,deny deny from all </Files>
Как заблокировать доступ к файлам определенного типа в . htaccess
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$"> Order Allow,Deny Deny from all </FilesMatch>
Как запретить просмотр директорий в .htaccess
Если у Вас возникла надобность в том, чтобы запретить посетителям просматривать структуру вашего сайта, то добавьте следующий код:
Options -Indexes
Если, Вам наоборот нужно открыть доступ к просмотру директорий, то поможет следующий код.
Options All +Indexes
Как ускорить время загрузки сайта за счет сжатия файлов
Можно сжимать любые файлы, например, для сжатия HTML-файлов нужно добавить вот такую вот строку
AddOutputFilterByType DEFLATE text/html
Если же это например текстовый файл, то надо так:
AddOutputFilterByType DEFLATE text/plain
Для JavaScript:
AddOutputFilterByType DEFLATE application/javascript
Есть код, который одновременно сожмет все javaScript, HTML и CSS файлы при помощи GZIP. http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ — [NC,F,L]
yourdomain.com — замените на домен Вашего сайта, чтобы скрипт работал.
Как заблокировать посетителей, которые пришли из определенного сайта.
Если для Вас имеет значение то, чтобы посетители какого-то сайте не переходили на Ваш сайт, так сказать, ограничить трафик из определенного домена, Вам поможет, вот такой вот не хитрый код:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFERER} site1.com [NC,OR] RewriteCond %{HTTP_REFERER} site2.com [NC,OR] RewriteRule .* - [F] </ifModule>
Как видите, можно блокировать сразу с нескольких добавляя строки, меняя только домены.
Кэширование файлов в .htaccess
Кэширование файлов помогает ускорить работу Вашего сайта. Добавьте код, в котором указаны расширения файлов, которые следует кэшировать.
<FilesMatch ". (flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$"> Header set Cache-Control "max-age=2592000" </FilesMatch>
Иногда бывает, что файлы не включены в список, но всеравно кэшируются браузером. Если таким файлам надо отключить кэширование, то код будет другим и в нем указываются расширения.
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch>
Как изменить главную страницу в .htaccess
Стандартной страницей загрузки являются страницы — index.html, index.php, index.htm.
DirectoryIndex newpage.html
Просто укажите новую страницу, вместо newpage.html.
Как заблокировать доступ к сайту по IP адресу
Про данный способ, можете прочитать в этой статье — Как заблокировать доступ к сайту по IP адресу
Как убрать index.php, index.html из URL адреса
Этот способ тоже описан в статье — Как убрать index. index \.- [L]
RewriteRule. index.php [L]
# КОНЕЦ WordPress
Наверх ↑
Наверх ↑
Опции № Опции
Любые параметры, которым предшествует + , добавляются к действующим в настоящее время параметрам, а любые параметры, которым предшествует — , удаляются из действующих в настоящее время параметров.
Возможные значения для директивы Options представляют собой любую комбинацию:
Нет
Все опции выключены.
Все
Все опции, кроме MultiView.Это значение по умолчанию.
ExecCGI
Разрешено выполнение сценариев CGI с использованием mod_cgi.
FollowSymLinks
Сервер будет переходить по символическим ссылкам в этом каталоге.
Включает
Разрешены включения на стороне сервера, предоставляемые mod_include.
Включает NOEXEC
Включения на стороне сервера разрешены, но #exec cmd и #exec cgi отключены.
Индексы
URL соответствует каталогу, а не DirectoryIndex — форматированному списку каталога.
Мультипросмотр
Согласованное содержимое «MultiViews» разрешено с использованием mod_negotiation.
SymLinksIfOwnerMatch
Переходите только по символическим ссылкам, если цель принадлежит тому же идентификатору пользователя, что и ссылка.
Это отключит все параметры, а затем включит только FollowSymLinks, что необходимо для mod_rewrite.
Опции Нет Параметры FollowSymLinks
Наверх ↑
DirectoryIndex # DirectoryIndex
DirectoryIndex устанавливает файл, который Apache будет обслуживать при запросе каталога.
Можно указать несколько URL-адресов, и в этом случае сервер вернет первый найденный.
DirectoryIndex index.php index.html /index.php
Наверх ↑
DefaultLanguage # DefaultLanguage
DefaultLanguage приведет к тому, что все файлы, с которыми еще не связан определенный языковой тег, будут использовать его.
DefaultLanguage ru
Наверх ↑
Кодировка по умолчанию # Кодировка по умолчанию
Установите кодировку символов по умолчанию, отправляемую в заголовке HTTP. См .: Установка информации о кодировке в .htaccess
AddDefaultCharset UTF-8
Установить кодировку для определенных файлов
AddType 'text / html; charset = UTF-8 '.html
Набор для конкретных файлов
AddCharset UTF-8 .html
Наверх ↑
ServerSignature # ServerSignature
Директива ServerSignature позволяет конфигурировать завершающую строку нижнего колонтитула в документах, созданных сервером. При желании добавьте строку, содержащую версию сервера и имя виртуального хоста, на страницы, созданные сервером (документы внутренних ошибок, списки каталогов FTP, вывод mod_status и mod_info и т. Д., Но не документы, созданные CGI или пользовательские документы ошибок).
по телефону
добавляет строку с номером версии сервера и ServerName обслуживающего виртуального хоста
Off
подавляет строку нижнего колонтитула
Электронная почта
создает ссылку mailto: на ServerAdmin указанного документа
.
SetEnv SERVER_ADMIN admin @ site.com Сервер Подпись Электронная почта
Наверх ↑
Принудительная загрузка файлов # Принудительная загрузка файлов
Приведенное ниже приведет к тому, что любые запросы файлов с указанными расширениями не будут отображаться в браузере, а вместо этого вызовет диалоговое окно «Сохранить как», чтобы клиент мог загрузить.
Приложение AddType / поток октетов .avi .mpg .mov .pdf .xls .mp4
Наверх ↑
Сжатие HTTP # Сжатие HTTP
Директива AddOutputFilter сопоставляет расширение расширения имени файла с фильтрами, которые будут обрабатывать ответы от сервера перед их отправкой клиенту.Mozilla / 4 \ .0 [678] no-gzip
BrowserMatch \ bMSIE! No-gzip! Gzip-only-text / html
Принудительное сжатие для определенных файлов
SetOutputFilter DEFLATE
Наверх ↑
Директива Header позволяет отправлять заголовки HTTP для каждого запроса или только для определенных файлов. Вы можете просматривать HTTP-заголовки сайтов с помощью Firebug, Chrome Dev Tools, Wireshark или онлайн-инструмента.
Заголовочный набор X-Pingback "http://www.askapache.com/xmlrpc.php" Набор заголовков Content-Language "en-US"
Наверх ↑
Это отключит заголовки HTTP, всегда используя . будет очень стараться удалить их.
Заголовок не установлен Pragma Заголовок всегда отключен WP-Super-Cache Заголовок всегда отключен X-Pingback
Наверх ↑
Защита паролем логина # Защита паролем логина
Это очень полезно для защиты файла wp-login.php
. Вы можете использовать этот генератор htpasswd.
Базовая аутентификация
AuthType Basic AuthName "Защищено паролем" AuthUserFile /full/path/to/.htpasswd Требовать действительного пользователя Удовлетворить все
Дайджест-аутентификация
Дайджест AuthType AuthName "Защищено паролем" AuthDigestDomain / wp-login.php https://www.askapache.com/wp-login.php AuthUserFile /full/path/to/.htpasswd Требовать действительного пользователя Удовлетворить все
Наверх ↑
Требуется особый IP # Требуется особый IP
Это способ разрешить доступ только определенным IP-адресам.
ErrorDocument 401 по умолчанию ErrorDocument 403 по умолчанию Заказать отказать, разрешить Запретить всем Разрешить от 198.101.159.98 localhost
Наверх ↑
Защита конфиденциальных файлов # Защита конфиденциальных файлов
Это запрещает любой веб-доступ к вашему файлу wp-config, error_logs, php.ini и htaccess / htpasswds.
Заказать отклонить, разрешить Запретить всем
Наверх ↑
Требовать SSL # Требовать SSL
Это приведет к принудительному использованию SSL и потребует точного имени хоста, иначе будет выполнено перенаправление на версию SSL. Полезно в файле /wp-admin/.htaccess
.
SSLOptions + StrictRequire SSLRequireSSL SSLRequire% {HTTP_HOST} eq "www.wordpress.com" ErrorDocument 403 https://www.wordpress.com
Наверх ↑
Наверх ↑
флагов RewriteRule — HTTP-сервер Apache версии 2.4
В этом документе обсуждаются флаги, доступные для
RewriteRule
директива,
с подробными пояснениями и примерами.
См. Также
A RewriteRule
может иметь
его поведение изменено одним или несколькими флагами. Флаги включены в
квадратные скобки в конце правила, и несколько флагов разделяются
запятыми.
Цель шаблона RewriteRule [Flag1, Flag2, Flag3]
Каждый флаг (за некоторыми исключениями) имеет краткую форму, например
CO
, а также более длинную форму, такую как cookie
.Хотя чаще всего используют
краткую форму, рекомендуется ознакомиться с
длинная форма, чтобы вы запомнили, что должен делать каждый флаг.
Некоторые флаги принимают один или несколько аргументов. Флаги не чувствительны к регистру.
Флаги, которые изменяют метаданные, связанные с запросом (T =, H =, E =)
не влияют на каталог и контекст htaccess, когда подстановка
(кроме «-») выполняется во время того же цикла обработки перезаписи.
Здесь представлены все доступные флаги, а также пример
о том, как вы можете их использовать.
Флаг [B] предписывает RewriteRule
избегать буквенно-цифровых
символов перед применением преобразования.
В версии 2.4.26 и более поздних можно ограничить экранирование определенными символами.
в обратных ссылках, перечислив их: [B = # ?;]
. Примечание: пространство
можно использовать в списке символов для экранирования, но нельзя
последний символ в списке.
mod_rewrite
должен отменять экранирование URL-адресов перед их сопоставлением,
поэтому обратные ссылки не экранируются во время их применения.поиск /(.*)$ «» /search.php?term=$1 «
Если введен поисковый запрос ‘x & y / z’, браузер закодирует его как
‘x% 20% 26% 20y% 2Fz’, делая запрос ‘search / x% 20% 26% 20y% 2Fz’. Без B
флаг, это правило перезаписи будет отображаться на search.php? term = x & y / z, который
не является действительным URL-адресом, поэтому будет закодирован как
search.php? Term = x% 20 & y% 2Fz =
, что не соответствует задумке.
Если для этого же правила установлен флаг B, параметры перекодируются.
перед передачей в выходной URL-адрес, что приведет к правильному сопоставлению с
/ поиск. поиск /(.*)$ "" /search.php?term=$1 "[B, PT]
Обратите внимание, что вам также может потребоваться установить AllowEncodedSlashes
на на
, чтобы получить это
конкретный пример для работы, поскольку httpd не допускает закодированные косые черты в URL-адресах и
возвращает 404, если видит его.
Это экранирование особенно необходимо в ситуации прокси,
когда серверная часть может сломаться, если будет представлен неэкранированный URL.
Альтернативой этому флагу является использование RewriteCond
для захвата против% {THE_REQUEST}, который будет захватывать
строки в закодированной форме.
Флаг [BNP] предписывает RewriteRule
экранировать пробел
в обратной ссылке на% 20, а не на "+". Полезно, когда обратная ссылка
будет использоваться в компоненте пути, а не в строке запроса.
Этот флаг доступен в версии 2.4.26 и новее.
Флаг [C] или [цепочка] указывает, что RewriteRule
привязано к следующему
правило. То есть, если правило совпадает, то оно обрабатывается как обычно и
контроль переходит к следующему правилу.Однако, если он не совпадает, то
следующее правило и любые другие правила, связанные вместе, являются
пропущено.
Флаг [CO] или [cookie] позволяет вам установить cookie, когда
в частности RewriteRule
совпадения. Аргумент состоит из трех обязательных полей и четырех необязательных.
поля.
Полный синтаксис флага, включая все атрибуты, следующий:
следует:
[CO = NAME: VALUE: DOMAIN: Life: path: secure: httponly]
Если в любом из полей cookie требуется буквальный символ ':',
доступен альтернативный синтаксис.Чтобы выбрать альтернативный синтаксис, файл cookie
«Имя» должно начинаться с символа ';' символ, а разделители полей должны быть
указано как ';'.
[CO =; NAME; VALUE: MOREVALUE; DOMAIN; Life; path; secure; httponly]
Вы должны указать имя, значение и домен для файла cookie.
- Домен
- Домен, для которого вы хотите, чтобы cookie был действительным. Это может быть
имя хоста, напримерwww.example.com
, или это может быть домен,
например,.example.com
. Это должно быть не менее двух частей
разделенные точкой. То есть это может быть не просто.com
или
.net
. Файлы cookie такого типа запрещены файлом cookie.
модель безопасности.
При желании вы также можете установить следующие значения:
- Срок службы
- Время, в течение которого файл cookie будет сохраняться в минутах.
- Значение 0 указывает, что файл cookie будет сохраняться только в течение
текущий сеанс браузера. Это значение по умолчанию, если нет
указано. - Путь
- Путь на текущем веб-сайте, для которого cookie действителен,
например/ customers /
или/ files / download /
. - По умолчанию установлено значение
/
, то есть весь
Веб-сайт. - Безопасность
- Если установлено значение
secure
,true
или1
,
куки будет разрешено переводить только через безопасный (https)
соединения. - httponly
- Если установлено значение
HttpOnly
,true
или
1
, для файла cookie будет установлен флагHttpOnly
,
это означает, что файл cookie недоступен для кода JavaScript на
браузеры, поддерживающие эту функцию./index\.html "" - "[CO = frontdoor: yes: .example.com: 1440: /]В приведенном примере правило не перезаписывает запрос.
Цель перезаписи "-" указывает mod_rewrite передать запрос
через без изменений. Вместо этого он устанавливает cookie
называется «входной дверью» до значения «да». Файл cookie действителен для любого хоста
в домене.example.com
. Срок его действия истекает в 1440 году.
минут (24 часа) и возвращается для всех URI.Флаг DPI заставляет часть PATH_INFO перезаписанного URI быть
отброшен.Этот флаг доступен в версии 2.2.12 и новее.
В контексте каталога каждый URI
RewriteRule
сравнивается с конкатенацией текущих значений URI
и PATH_INFO.Текущий URI может быть начальным URI по запросу клиента,
результат предыдущего раунда обработки mod_rewrite или результат
предыдущее правило в текущем раунде обработки mod_rewrite.Напротив, PATH_INFO, который добавляется к URI перед каждым
правило отражает только значение PATH_INFO перед этим раундом
обработка mod_rewrite.Как следствие, если большие порции
URI сопоставляются и копируются в замену в нескольких
RewriteRule
, без учета
какие части URI пришли из текущего PATH_INFO, последнего
К URI может быть добавлено несколько копий PATH_INFO.Используйте этот флаг для любой замены, в которой PATH_INFO
из предыдущего сопоставления этого запроса с файловой системой не соответствует
интерес. Этот флаг навсегда забывает установленный PATH_INFO
перед началом этого раунда обработки mod_rewrite. PATH_INFO будет
не пересчитываться до текущего раунда обработки mod_rewrite
завершает. Последующие правила во время этого раунда обработки будут видеть
только прямой результат замен, без PATH_INFO
добавлено.С помощью флага [E] или [env] вы можете установить значение среды
переменная. Обратите внимание, что некоторые переменные среды могут быть установлены после правила
запускается, таким образом сбрасывая то, что вы установили. Увидеть
Документ Environment Variables для более подробной информации о том, как Environment
переменные работают.Полный синтаксис этого флага:
[E = VAR: VAL] [E =! VAR]
VAL
может содержать обратные ссылки ($ N
или
% N
), которые расширяются.Использование краткой формы
, вы можете установить переменную среды с именем
VAR
в
пустое значение.Форма
позволяет отключить ранее установленную переменную среды с именем
VAR
.Переменные среды могут затем использоваться в различных
контексты, включая программы CGI, другие директивы RewriteRule или
Директивы CustomLog.В следующем примере для переменной среды с именем image устанавливается значение
значение «1», если запрошенный URI является файлом изображения. Тогда это
переменная среды используется для исключения этих запросов из доступа
журнал.RewriteRule "\. (Png | gif | jpg) $" "-" [E = image: 1] CustomLog "logs / access_log" в сочетании env =! Image
Обратите внимание, что этот же эффект можно получить с помощью
SetEnvIf
. Эта техника предлагается как
пример, а не как рекомендация.Использование флага [END] завершает не только текущий раунд перезаписи.
обработка (как [L]), но также предотвращает любую последующую перезапись
обработка происходит в контексте каталога (htaccess).Это не относится к новым запросам, полученным из внешних
перенаправляет.Использование флага [F] заставляет сервер возвращать статус 403 Forbidden
код клиенту. Хотя то же самое поведение может быть достигнуто с помощью
директиваDeny
, это
обеспечивает большую гибкость при присвоении статуса "Запрещено".Следующее правило запрещает файлы
.exe
скачано с вашего сервера.RewriteRule "\ .exe" "-" [F]
В этом примере для цели перезаписи используется синтаксис «-», что означает
что запрошенный URI не изменен.Нет причин переписывать на
другой URI, если вы собираетесь запретить запрос.При использовании [F] подразумевается [L], то есть возвращается ответ
немедленно, и никакие дальнейшие правила не оцениваются.Флаг [G] заставляет сервер возвращать статус 410 Gone с
ответ. Это означает, что ресурс раньше был доступен, но его нет.
доступно больше.Как и в случае с флагом [F], вы обычно будете использовать синтаксис "-" для
перезаписать цель при использовании флага [G]:RewriteRule «oldproduct» «-» [G, NC]
При использовании [G] подразумевается [L], то есть возвращается ответ
немедленно, и никакие дальнейшие правила не оцениваются.Принудительно обрабатывает полученный запрос с указанным
обработчик. Например, можно использовать это, чтобы заставить все файлы без
расширение файла для анализа обработчиком php:RewriteRule "! \." "-" [H = application / x-httpd-php]
Регулярное выражение выше -
! \.
- подойдет любому запросу
который не содержит литерала.
персонаж.Это также можно использовать для принудительного выполнения обработчика в зависимости от некоторых условий.
Например, следующий фрагмент, используемый в контексте сервера, позволяет
.(/source/.+\.php)s$
- будет
соответствовать любому запросу, который начинается с/ source /
, за которым следует 1 или
n символов, за которыми следует буквально.phps
. Обратная ссылка
Рефереры $ 1 к захваченному совпадению в круглых скобках обычного
выражение.Флаг [L] заставляет
mod_rewrite
прекратить обработку
набор правил. В большинстве случаев это означает, что если правило соответствует, нет
дальнейшие правила будут обработаны. Это соответствует
последняя команда
в Perl или командаbreak
в
С.Используйте этот флаг, чтобы указать, что следует применить текущее правило
немедленно, не учитывая дальнейшие правила.Если вы используете
RewriteRule
в любом
.htaccess
файлов или в
<Каталог>
разделов,
важно иметь некоторое представление о том, как действуют правила
обработанный. Упрощенная форма этого состоит в том, что после того, как правила были
обработан, перезаписанный запрос возвращается в парсинг URL
двигатель делать что может с ним. Не исключено, что как переписанный
запрос обработан,.htaccess
или
могут встретиться снова, и, таким образом, набор правил может быть запущен снова из
Начало. Чаще всего это происходит, если одно из правил вызывает
перенаправление - внутреннее или внешнее - в результате чего процесс запроса
начать сначала.Поэтому важно, если вы используете директивы
RewriteRule
в одной из этих
контекстах, в которых вы предпринимаете явные шаги, чтобы избежать зацикливания правил, а не
рассчитывать только на флаг [L], чтобы завершить выполнение серии
правила, как показано ниже.Альтернативный флаг [END] может использоваться не только для завершения
текущий раунд обработки перезаписи, но предотвратить любые последующие
обработка перезаписи, происходящая из каталога (htaccess)
контекст. Это не относится к новым запросам, полученным из внешних
перенаправляет.Приведенный здесь пример перепишет любой запрос на
index.php
, предоставляя исходный запрос в виде строки запроса
аргументindex.php
, однакоRewriteCond
гарантирует, что если запрос
уже для индекса.(. *) "" /index.php?req=$1 "[L, PT]
Флаг [N] заставляет набор правил начинать заново сверху, используя
результат набора правил в качестве отправной точки. Использовать
с особой осторожностью, так как это может привести к зацикливанию.Флаг [Next] можно использовать, например, если вы хотите заменить
определенная строка или буква неоднократно в запросе. Пример, показанный здесь
заменит A на B везде в запросе и продолжит выполнение
так что пока нет больше As на замену.RewriteRule "(. *) A (. *)" "$ 1B $ 2" [N]
Вы можете думать об этом как о цикле
и
:
шаблон все еще совпадает (т.е. пока URI все еще содержит
A
), выполните эту замену (т.е. замените
A
сB
).В версии 2.4.8 и новее этот модуль возвращает ошибку после 32000 итераций для
защитить от непреднамеренного зацикливания. Альтернативное максимальное количество
итерации можно указать, добавив к флагу N.# Будьте готовы заменять 1 символ на каждом проходе цикла RewriteRule "(. +) [> <;] $" "$ 1" [N = 64000] # ... или откажемся, если после 10 петель RewriteRule "(. +) [> <;] $" "$ 1" [N = 10]
Использование флага [NC] приводит к тому, что
RewriteRule
будет соответствовать в
без учета регистра. То есть не важно, появятся ли буквы
в соответствующем URI в верхнем или нижнем регистре.В приведенном ниже примере любой запрос файла изображения будет проксироваться
на ваш выделенный сервер изображений. /anchor/(.+) "" /bigpage.html#$1 "[NE, R]В приведенном выше примере
/ anchor / xyz
будет перенаправлен на
/bigpage.html#xyz
. Отсутствие [NE] приведет к #
преобразуется в его эквивалент в шестнадцатеричном коде,% 23
, что будет
затем приведет к возникновению ошибки 404 Not Found.Использование флага [NS] предотвращает использование правила на
подзапросы. Например, страница, включенная с использованием SSI (Сервер
Side Include) - это подзапрос, и вы можете избежать перезаписи
происходит по этим подзапросам.Также, когдаmod_dir
пытается найти информацию о возможных файлах каталога по умолчанию
(например,index.html
файлов), это внутренний
подзапрос, и вы часто хотите избежать перезаписи таких подзапросов.
В подзапросах это не всегда полезно и даже может вызвать ошибки, если
применяется полный набор правил. Используйте этот флаг, чтобы исключить
проблемные правила.Чтобы решить, использовать ли это правило: если вы префикс URL-адресов
CGI-скрипты, чтобы заставить их обрабатывать CGI-скрипт, это
вероятно, вы столкнетесь с проблемами (или значительными накладными расходами)
по подзапросам. В этих случаях используйте этот флаг.Изображения, файлы javascript или файлы css, загруженные как часть HTML-страницы,
не являются подзапросами - браузер запрашивает их как отдельный HTTP
Запросы.Использование флага [P] приводит к тому, что запрос обрабатывается
mod_proxy
, и обрабатывается через запрос прокси. За
Например, если вы хотите, чтобы все запросы изображений обрабатывались серверной частью
image server, вы можете сделать что-то вроде следующего:RewriteRule "/(.*)\.(jpg|gif|png)$" "http: // images.example.com/$1.$2 "[P]
Использование флага [P] подразумевает [L] - то есть запрос немедленно
проталкивается через прокси, и никакие следующие правила не будут
считается.Вы должны убедиться, что строка подстановки является допустимым URI
(обычно начинается сhttp: //
имя хоста ), который может быть
обрабатываетсяmod_proxy
. Если нет, вы получите
ошибка прокси-модуля. Используйте этот флаг для достижения
более мощная реализация директивыProxyPass
,
для отображения удаленного содержимого в пространство имен локального сервера.Предупреждение системы безопасности
Будьте осторожны при построении целевого URL правила, учитывая
влияние на безопасность от предоставления клиенту возможности влиять на набор
URL-адреса, по которым ваш сервер будет действовать как прокси. Убедитесь, что схема
и часть имени хоста URL-адреса либо фиксирована, либо не позволяет
ненадлежащее влияние клиента.Предупреждение о производительности
Использование этого флага запускает использование
mod_proxy
, без обработки постоянных соединений.Этот
означает, что производительность вашего прокси будет лучше, если вы настроите его с помощьюProxyPass
или
ProxyPassMatch
Это связано с тем, что этот флаг запускает использование рабочего по умолчанию, который не обрабатывает объединение / повторное использование соединений.
Избегайте использования этого флага и по возможности отдайте предпочтение этим директивам.
Примечание:
mod_proxy
должен быть включен, чтобы
использовать этот флаг.Предполагается, что цель (или строка подстановки) в RewriteRule является
путь к файлу по умолчанию.Использование флага [PT] заставляет его лечиться
вместо этого как URI. То есть
использование флага [PT] приводит к тому, что результатRewriteRule
передается обратно через
Сопоставление URL-адресов, так что сопоставления на основе местоположения, такие какAlias
,Redirect
илиScriptAlias
, например, могут иметь
шанс вступить в силу.Если, например, у вас есть
Псевдоним
для / icons и указывает на негоRewriteRule
, вы должны
используйте флаг [PT], чтобы убедиться, что
Псевдоним
оценивается.Псевдоним "/ icons" "/ usr / local / apache / icons" RewriteRule "/pics/(. +)\.jpg$" "/icons/$1.gif" [PT]
Пропуск флага [PT] в этом случае приведет к тому, что псевдоним будет
игнорируется, в результате чего возвращается ошибка «Файл не найден».Флаг
PT
подразумевает флагL
:
перезапись будет остановлена для передачи запроса на
следующий этап обработки.Обратите внимание, что флаг
PT
подразумевается для каждого каталога
контексты, такие как
или в.htaccess
файлов. Единственный способ обойти это
переписать на-
.Когда URI замены содержит строку запроса, поведение по умолчанию
изRewriteRule
- удалить
существующую строку запроса и замените ее вновь созданной.
Использование флага [QSA] приводит к объединению строк запроса.Рассмотрим следующее правило:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
С флагом [QSA] запрос
/ pages / 123? One = two
будет
сопоставлен с/ страница. php? page = 123 и один = два
. Без [QSA]
флаг, этот же запрос будет сопоставлен с
/page.php?page=123
- то есть существующая строка запроса
будут отброшены.Когда запрошенный URI содержит строку запроса, а целевой URI делает
нет, по умолчаниюRewriteRule
копирует этот запрос
строка в целевой URI. Использование флага [QSD] приводит к тому, что строка запроса
быть отброшенным.Этот флаг доступен в версии 2.4.0 и новее.
Использование [QSD] и [QSA] вместе приведет к тому, что [QSD] будет иметь приоритет.
Если целевой URI имеет строку запроса, поведение по умолчанию будет
наблюдается - то есть исходная строка запроса будет отброшена и
заменяется строкой запроса в целиRewriteRule
URI.По умолчанию первый (самый левый) вопросительный знак в замене
отделяет путь от строки запроса. Использование флага [QSL] указывает
RewriteRule
вместо разделения
два компонента с последним (крайним справа) вопросительным знаком.Это полезно при сопоставлении с файлами, имеющими буквальные вопросительные знаки в
их имя файла. Если в подстановке не используется строка запроса,
к нему можно добавить вопросительный знак вместе с этим флагом.Этот флаг доступен в версии 2.4.19 и новее.
Использование флага [R] вызывает перенаправление HTTP для браузера.
Если указан полный URL (то есть, включая
http: // servername /
), то на это будет выполнено перенаправление
место расположения.В противном случае текущий протокол, имя сервера и номер порта.
будет использоваться для генерации URL, отправленного с перенаправлением.Может быть указан любой допустимый код статуса ответа HTTP ,
с использованием синтаксиса [R = 305] с кодом состояния 302, используемым
по умолчанию, если ничего не указано. Указанный код состояния не требуется.
обязательно должен быть код статуса редиректа (3xx). Однако,
если код состояния находится за пределами диапазона перенаправления (300–399), то
строка замены полностью отбрасывается, и перезапись останавливается, как если бы
использовалисьL
.В дополнение к кодам состояния ответа вы также можете указать перенаправление
статус с использованием их символических имен:temp
(по умолчанию),
постоянный
, илисм. Другой
.Вы почти всегда захотите использовать [R] вместе с [L] (то есть
используйте [R, L]), потому что сам по себе флаг [R] добавляет
http: // thishost [: thisport]
в URI, но затем передает это
перейти к следующему правилу в наборе правил, что часто может приводить к
URI в предупреждениях запроса.Флаг [S] используется для пропуска правил, которые вы не хотите запускать. В
синтаксис флага пропуска [S = N ], где N означает
количество правил, которые нужно пропустить (при условии, что
соответствует). Это можно представить как
RewriteRulegoto
в вашем наборе правил перезаписи. В следующем примере нам нужно только
для запускаRewriteRule
, если
запрошенный URI не соответствует фактическому файлу.# Запрос несуществующего файла? RewriteCond "% {REQUEST_FILENAME}" "! -F" RewriteCond "% {REQUEST_FILENAME}" "! -D" # Если да, пропустите эти два правила RewriteRules RewriteRule ".? "" - "[S = 2] RewriteRule "(. * \. Gif)" "images.php? $ 1" RewriteRule "(. * \. Html)" "docs.php? $ 1"
Этот метод полезен, потому что
RewriteCond
применяется только к
RewriteRule
немедленно
после этого. Таким образом, если вы хотите применитьRewriteCond
к несколькимRewriteRule
s, один из возможных способов -
отмените эти условия и добавьтеRewriteRule
с флагом [Пропустить]. Вы можете
используйте это для создания псевдо-if-then-else конструкций: последнее правило
тогда предложение становитсяskip = N
, где N - это
количество правил в else-clause:# Файл существует? RewriteCond "% {REQUEST_FILENAME}" "! -F" RewriteCond "% {REQUEST_FILENAME}" "! -D" # Создайте конструкцию if-then-else, пропустив 3 строки, если мы хотели перейти к строфе "else".RewriteRule ".?" «-» [S = 3] # ЕСЛИ файл существует, то: RewriteRule "(. * \. Gif)" "images.php? $ 1" RewriteRule "(. * \. Html)" "docs.php? $ 1" # Пропустить строфу "else". RewriteRule ".?" «-» [S = 1] # ELSE ... RewriteRule "(. *)" "404.php? File = $ 1" # END
Вероятно, проще выполнить такую конфигурацию, используя
вместо директивУстанавливает тип MIME, с которым будет получен ответ
послал.Это имеет тот же эффект, что и директиваAddType
.Например, вы можете использовать следующую технику для обслуживания Perl
исходный код в виде обычного текста, если требуется определенным образом:# Обслуживать файлы .pl как обычный текст RewriteRule "\ .pl $" "-" [T = text / plain]
Или, возможно, если у вас есть камера, которая производит изображения в формате jpeg без
расширения файлов, вы можете принудительно обслуживать эти изображения с помощью
правильный тип MIME на основании их имен файлов:# Файлы с 'IMG' в имени являются изображениями jpg.RewriteRule "IMG" "-" [T = image / jpg]
Обратите внимание, что это тривиальный пример, и его можно было бы сделать лучше.
используя
вместо. Всегда считайте альтернативный
решения проблемы, прежде чем прибегать к перезаписи, что
неизменно будет менее эффективным решением, чем альтернативы.Если используется в контексте каталога, используйте только
-
(тире)
в качестве замены для всего цикла обработки mod_rewrite ,
в противном случае MIME-тип, установленный этим флагом, будет утерян из-за внутреннего
повторная обработка (включая последующие раунды обработки mod_rewrite).ФлагL
может быть полезен в этом контексте для завершения
текущий раунд обработки mod_rewrite.Убедиться, что .htaccess и mod_rewrite работают должным образом
Перейти к навигации по документам
Примечание: В настоящее время вы читаете документацию по болту
3,7 . Ищем документацию
для болта 4.0 вместо этого?Bolt широко использует общую функцию, называемую «перезапись URL». Этот
в основном означает, что вы можете запросить красивый URL-адрес, например/ page / about-this-website
в вашем браузере, и за кулисами ваш веб-сервер просто "переведет" это
для запускаindex.php
с правильными параметрами, чтобы Bolt мог создать
правильная страница для вас.Это не работает сразу на всех веб-серверах, но - это
требование для использования Bolt. Если вы читаете эту страницу, вероятно, вы находитесь в
процесс настройки Bolt и после запроса первой страницы вы были перенаправлены
на страницу/ bolt / userfirst
, где вы увидели следующее сообщение об ошибке:Проблемы возникают при одной из трех следующих возможностей:
- Вы потеряли файл .htaccess
- Apache игнорирует
.htaccess
всего - Mod_rewrite не включен
Проверить, работает ли
.htaccess
¶Самый простой способ проверить, использует ли apache ваш файл
.htaccess
или иначе
игнорирует его, значит намеренно сломать его.Отредактируйте файл
.htaccess
, чтобы в первой строке было "Test.":Тест. # Установить обработчик по умолчанию DirectoryIndex index.php index.html index.htm ...
Теперь, если вы обновите страницу в своем браузере, вы должны увидеть страницу с ошибкой, например
это:Если вы видите эту ошибку, это на самом деле хорошо ! Это означает, что Apache
разбор файла.htaccess
, и он обнаруживает ошибку, которую мы туда поместили! Так
пока все хорошо!Если вы выполняете , а не , вы видите «Внутренняя ошибка сервера», ваша установка Apache игнорирует
.htaccess
, и вам нужно это исправить. Обычно Apache игнорирует
.htaccess
из-за следующей конфигурации ApacheAllowOverride none
.
Проверьте конфигурацию виртуального хоста и добавьте / изменитеAllowOverride All
.Пример:
Индексы опций FollowSymLinks AllowOverride All Требовать все предоставлено Если вы не уверены, что файл
.htaccess
существует и доступен для чтения, загрузите
наш тестовый скрипт:- Загрузите сценарий здесь: htaccess_tester.php на GitHub
- При необходимости переименуйте его в
htaccess_tester.php
. - Поместите его в папку, в которую вы положили Bolt.
- Откройте его в браузере с URL-адресом.(так что убедитесь, что у вас нет доступа к нему
как файл: //
) - Если вы получили сообщение об ошибке, вам нужно будет исправить ее, убедившись, что
.htaccess
файл существует и доступен для чтения.
Это правильно:
Проверить, работает ли
mod_rewrite
¶Чтобы проверить, правильно ли работает
mod_rewrite
, выполните следующие действия:- Загрузите сценарий здесь: htaccess_tester.php на GitHub
- Переименуйте его в
htaccess_tester.. * $ htaccess_tester.php
- В браузере откройте
/ test
с правильным доменным именем. Итак, это должно
выглядит так:http: // localhost / test
илиhttp://example.org/test
. - Если вы видите следующее, это работает! Если вы увидите что-то еще, вам понадобится
чтобы исправить это.
Это правильно:
Мой htaccess не работает? Что делать? ¶
Существует множество причин, по которым он может не работать в вашей системе, и эти
Причины настолько разнообразны, что мы не можем дать исчерпывающее решение для этого.Что
сказал, вот несколько указателей, которые могут помочь вам это исправить:Включите
.htaccess
в вашемhttpd.conf
илиapache.conf
¶Это необычно, но возможно, что
.htaccess
не включен на вашем сайте. если ты
размещаете его самостоятельно, это достаточно легко исправить. Откройте свойhttpd.conf
или
apache.conf
в текстовом редакторе и найдите раздел<Каталог "/ var / www / htdocs"> AllowOverride Нет
Измените строку
AllowOverride
на:AllowOverride All
Обязательно перезапустите Apache после внесения любых изменений в этот файл.Теперь твой
.htaccess
должен работать. Вы также можете сделать это изменение внутри виртуального хоста,
что обычно было бы предпочтительнее, но это зависит от того, как установлен Apache
вверх.Если ваш сайт размещен в другом месте, проверьте панель управления (Plesk, DirectAdmin,
CPanel, что угодно), чтобы посмотреть, можете ли вы включить там.htaccess
. Если нет, свяжитесь
ваш хостинг-провайдер сделает это за вас.Включить
mod_rewrite
в Apache¶Есть несколько способов включить
mod_rewrite
, если он еще не включен
на вашей настройке.См. Эту ветку переполнения стека, чтобы узнать о различных способах сделать это.
на разных настройках:
Как включить mod_rewrite для Apache 2.2.Проверьте файлы журнала Apache¶
Apache регистрирует лотов и файлов. Изучите журналы доступа и ошибок, созданные
Apache, чтобы узнать, содержат ли они ценную информацию. Обычное место для этих
files - это/ var / log / apache2 /
, но он может находиться по другому пути на вашем
система. Проверьте свой файл apache.conf
, чтобы узнать, где эти файлы могут скрываться.Включение базы перезаписи¶
Если вы настраиваете Bolt в подпапке, возможно, вам придется раскомментировать строку
для параметраRewriteBase
.Изменение
# Некоторые серверы требуют установки RewriteBase. Если да, выберите правильную папку. # RewriteBase /
С
по:
# Некоторые серверы требуют установки RewriteBase. Если да, выберите правильную папку. RewriteBase /
Переместите свой сайт на «верхний уровень»
Если вы настраиваете Bolt в подпапке, и предыдущий совет не работает, вы
может попробовать настроить Bolt в его собственном субдомене, поскольку обычно это дает меньше
проблемы.Итак, вместо использованияhttp://example.org/testingbolt
настройте его как
http://testingbolt.example.org/
.Свяжитесь с вашим хостингом
Спросите своего веб-хостинга, что может быть не так. Чем больше информации вы им дадите, тем больше
шанс, что они смогут вам помочь.Используйте предварительно настроенную сборку Apache¶
Если вы настраиваете Apache на своем компьютере, и он оказывается
сложно настроить, вам следует подумать об использовании XAMPP
(Windows), MAMP (OS X) или AMPPS
(Windows, OS X, Linux). - В браузере откройте