Rewritecond the request html

Настройка редиректов в htaccess

Как сделать seo редиректы на www или без него, добавление/удаление расширений у страниц.

Добавить www

Для http:

RewriteCond % !^www. RewriteRule (.*) http://www.%/$1 [R=301,L]

Для https:

RewriteCond % !^www. RewriteRule (.*) https://www.%/$1 [R=301,L]

Удалить www

Для http:

RewriteCond % ^www\.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Для https:

RewriteCond % ^www\.(.*) [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Добавление слеша в конец URL

RewriteBase / RewriteCond % !-f RewriteCond % !\.xml RewriteCond % !(.*)/$ RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Иногда не работает с кириллическими доменами, возможен еще вариант:

RewriteCond % !-f RewriteCond % !\.xml RewriteCond % !(.*)/$ RewriteRule ^(.*)$ http://xn--80aswg.xn--p1ai/$1/ [L,R=301] # Для https: RewriteCond % !-f RewriteCond % !\.xml RewriteCond % !(.*)/$ RewriteRule ^(.*)$ http://xn--80aswg.xn--p1ai/$1/ [L,R=301]

Удаление слеша в конце URL

RewriteCond % ^(.*)/$ RewriteRule ^(.*)/$ /$1 [R=301,L]

Удаление повторяющихся слешей

Если нужно убрать несколько слешей, например https://example.com/sections///////// или https://example.com/////////sections/ .

RewriteCond % ([^\s]*)\/(\?[^\s]*)? RewriteRule (.*) %1 [R=301,L]

Редирект с index.php

RewriteCond % ^.*/index.php RewriteRule (.*) http://% [R=301,L]

Для https:

RewriteCond % ^.*/index.php RewriteRule (.*) https://% [R=301,L]

Редирект .htm на .html

RewriteBase / RewriteCond % !-f RewriteCond % !-d RewriteCond % \.htm$ RewriteRule ^(.*)\.htm$ $1.html [R=301,L]

Замена .html на слеш

RewriteBase / RewriteCond % !-f RewriteCond % !-d RewriteCond % \.html$ RewriteRule ^(.*)\.html$ $1/ [R=301,L]

Если расширение не .html то 404

RewriteCond % !-f RewriteCond % !-d RewriteCond % !\.html$ RewriteRule ^(.*)$ index.php?route=404 [L,QSA]

Редирект с одного домена на другой

Если к сайту привязаны несколько доменов, то следует сделать 301-й редирект на основной (например example.com на example.ru):

RewriteEngine On RewriteCond % example.com RewriteRule ^(.*)$ https://example.ru/$1 [R=301,L]

Источник

Читайте также:  Mr. Camel

Директива RewriteCond

Директива RewriteCond определяет условия для какого-либо правила. Перед директивой RewriteRule располагаются одна или несколько директив RewriteCond. Следующее за ними правило преобразования используется только тогда, когда URI соответствует условиям этой директивы и также условиям этих дополительных директив.

СравниваемаяСтрока строка которая может содержать следующие дополнительные конструкции вдополении к простому тексту:

  • RewriteRule обратные_связи: Это обратные связи вида $N (0 RewriteRule (единственной, следующей сразу затекущим набором директив RewriteCond ).
  • RewriteCond обратные_связи: Это обратные связи вида %N (1 RewriteCond втекущем наборе условий.
  • RewriteMap расширения: Это расширения вида $ Смотрите документацию по RewriteMap для получения более подробной информации.
  • Переменные сервера: Это переменные вида %NAME_OF_VARIABLE > где 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. Большинство из них документрованны в других местах руководства или в спецификации CGI . Те, что являются для mod_rewrite специальными включают: IS_SUBREQ Будет содержать текст true , если запрос выполняется в текущий момент как подзапрос, false – в другом случае. Подзапросы могут быть сгенерированы модулями, которым нужно иметь дело с дополнительными файлами, или URI для того, чтобы выполнить собственные задачи. API_VERSION Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h. API версия модуля соответствует используемой версии Apache (для версии Apache 1.3.14, к примеру это 19990320:10), однако это в основном интересно авторам модулей. THE_REQUEST Полная строка HTTP запроса, отправленная браузером серверу (т.е., GET /index.html HTTP/1.1 ). Она не включает какие-либо дополнительные заголовки, отправляемые браузером. REQUEST_URI Ресурс, запрошенный в строке HTTP запроса. (В примере выше, это было бы /index.html .) REQUEST_FILENAME Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу.

  1. Переменные SCRIPT_FILENAME и REQUEST_FILENAME содержат одинаковые значения, т.е., значение поля filename внутренней структуры request_rec сервера Apache. Первое имя это просто широко известное имя переменной CGI в то время как второе это постоянная копия REQUEST_ URI (содержащая значение поля uri структуры request_rec ).
  2. Есть специальный формат: % где переменная может быть любой переменной окружения. Это ищется во внутренних структурах Apache и (если там нет) с помощью вызова getenv() из процесса Apache сервера.
  3. Есть специальный формат: % , где заголовок может быть любым именем HTTP MIME-заголовка. Это ищется в HTTP запросе. Пример: % значение HTTP заголовка Proxy-Connection:.
  4. Есть специальный формат % опережающих запросов, которые производятся внутренним (основанном на URL ) подзапросом для определения конечного значения переменной. Используйте это, когда вы хотите использовать переменную для преобразований, которая реально определяется позднее, в какой-либо фазе API , и таким образом недоступна на данном этапе. Для примера, когда вы хотите преобразовать соответственно переменной REMOTE_USER из контекста сервера (файл httpd.conf ), вы должны использовать % , потому что эта переменная устанавливается в фазах авторизации, которые идут после фазы трансляции URL в которой иработает mod_rewrite. С другой стороны, по причине реализации работы mod_rewrite в контексте каталога (файл .htaccess ) через Fixup фазу API и из-за того, фазы авторизации идут до этой фазы, вы просто можете там использовать % .
  5. Есть специальный формат: % который создает внутренний (основанный на имени файла) подзапрос для определения конечного значения переменной. В основном это тоже самое что и формат LA-U приведенный выше.

Условие это шаблон условия, т.е., какое-либо регулярное выражение применяемое к текущему экземпляру СравниваемаяСтрока, т.е., СравниваемаяСтрока просматривается на поиск соответствия Условие.

Помните: Условие это perl совместимое регулярное выражение с некоторыми дополнениями:

  1. Вы можете предварять строку шаблона префиксом ! (восклицательный знак) для указания несоответствия шаблону.
  2. Есть некоторые специальные варианты Условие. Вместо обычных строк с регулярными выражениями можно также использовать один из следующих вариантов:
    • (лексически меньше)
      Условие считается простой строкой и лексически сравнивается с СравниваемаяСтрока. Истинно если СравниваемаяСтрока лексически меньше чем Условие.
    • >Условие (лексически больше)
      Условие считается простой строкой и лексически сравнивается с СравниваемаяСтрока. Истинно если СравниваемаяСтрока лексически больше чем Условие.
    • =Условие (лексически равно)
      Условие считается простой строкой и лексически сравнивается с СравниваемаяСтрока. Истинно если СравниваемаяСтрока лексически равно Условие, т.е. эти две строки полностью одинаковы (символ всимвол). Если Условие имеет вид «» (два знака дюйма идущих подряд) это сравнивает СравниваемаяСтрока с пустой строкой.
    • -d (является ли каталогом)
      СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является каталогом.
    • -f (является ли обычным файлом)
      СравниваемаяСтрока считается путем, проверяется существование этого пути иточто этот путь является обычным файлом.
    • -s (является лиобычным файлом с ненулевым размером)
      СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является обычным файлом, размер которого больше нуля.
    • -l (является лисимволической ссылкой)
      СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является символической ссылкой.
    • -F (проверка существования файла через подзапрос)
      Проверяет через все списки контроля доступа сервера, существующие в настоящий момент, является ли СравниваемаяСтрока существующим файлом, доступным по этому пути. Для этой проверки используется внутренний подзапрос, поэтому используйте эту опцию с осторожностью — это отрицательно сказывается напроизводительности сервера!
    • -U (проверка существования URL через подзапрос)
      Проверяет через все списки контроля доступа сервера, существующие в настоящий момент, является ли СравниваемаяСтрока существующим URL , доступным по этому пути. Для этой проверки используется внутренний подзапрос, поэтому используйте эту опцию с осторожностью — это отрицательно сказывается напроизводительности сервера!

Замечание

Все эти проверки также могут быть предварены префиксом восклицательный знак (‘!’) для инвертирования их значения.

Дополнительно вы можете устанавливать специальные флаги для Условие, добавляя

третьим аргументом в директиву RewriteCond. Flags список следующих флагов разделенных запятыми:

  • nocase|NC (регистронезависимо)
    Регистр не имеет значения, т.е., нет различий между ‘A-Z’ и’a-z’ как в дополнении СравниваемаяСтрока так и Условие. Этот флаг эффективен только для сравнений между СравниваемаяСтрока и Условие. Он не работает при проверках в файловой системе и в подзапросах.
  • ornext|OR (либо следующее условие)
    Используйте для комбинирования условий в правилах OR вместо AND. Типичный пример:
RewriteCond % ^host1.* [OR] RewriteCond % ^host2.* [OR] RewriteCond % ^host3.* RewriteRule . some special stuff for any of these hosts.

Пример:

Для выдачи главной страницы сайта в зависимости от установки User-Agent: заголовка запроса, вы можете использовать следующие директивы:

RewriteCond % ^Mozilla.* RewriteRule ^/$ /homepage.max.html [L] RewriteCond % ^Lynx.* RewriteRule ^/$ /homepage.min.html [L] RewriteRule ^/$ /homepage.std.html [L]

Источник

Оцените статью