Skip to content

Instantly share code, notes, and snippets.

@EugeneZheleznov
Last active November 1, 2023 10:06
Show Gist options
  • Save EugeneZheleznov/548414122e0512d327d68cd96a3ee69b to your computer and use it in GitHub Desktop.
Save EugeneZheleznov/548414122e0512d327d68cd96a3ee69b to your computer and use it in GitHub Desktop.
[Redirect важные примеры] #htaccess

Redirect важные примеры htaccess

Для подобных редиректов

https://SITE.ru/index.php
https://SITE.ru/index.asp
https://SITE.ru/index.htm
https://SITE.ru/index.aspx
https://SITE.ru/index
https://SITE.ru/index.%20html
https://SITE.ru/default.xhtml
https://SITE.ru/default.aspx
https://SITE.ru/default.htm
https://SITE.ru/default.php
https://SITE.ru/default.asp
https://SITE.ru/default.%20html
https://SITE.ru/index.xhtml
https://SITE.ru/default

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)index\.php$ $1 [R=301,L] 

# and aspx
RewriteCond %{THE_REQUEST} ^.*/index.asp 
RewriteRule (.*) https://%{HTTP_HOST} [R=301,L]

# and html
RewriteCond %{THE_REQUEST} ^.*/index.htm 
RewriteRule (.*) https://%{HTTP_HOST} [R=301,L]

RewriteCond %{THE_REQUEST} ^.*/index.\%20html 
RewriteRule (.*) https://%{HTTP_HOST} [R=301,L]

RewriteCond %{THE_REQUEST} ^.*/index.xhtml
RewriteRule (.*) https://%{HTTP_HOST} [R=301,L]


RewriteCond %{THE_REQUEST} ^.*/default.xhtml 
RewriteRule (.*) https://%{HTTP_HOST} [R=301,L]

RewriteCond %{THE_REQUEST} ^.*/default.asp 
RewriteRule (.*) https://%{HTTP_HOST} [R=301,L]
  
RewriteCond %{THE_REQUEST} ^.*/default.htm 
RewriteRule (.*) https://%{HTTP_HOST} [R=301,L]

RewriteCond %{THE_REQUEST} ^.*/default.php 
RewriteRule (.*) https://%{HTTP_HOST} [R=301,L]

RewriteCond %{THE_REQUEST} ^.*/default.\%20html 
RewriteRule (.*) https://%{HTTP_HOST} [R=301,L]

Redirect 301 /index https://SITE.ru/
Redirect 301 /default https://SITE.ru/

Быстрый шаблон

# Редирект с http на https
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Редирект с www на без www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

# Убираем расширение файла .php в конце URL
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]

# Убираем index.php в конеце URL
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)index\.php$ $1 [R=301,L]

# Убираем несколько слешей /// в конеце URL
RewriteCond %{THE_REQUEST} ([^\s]*)\/{2,}(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]

Быстрый шаблон 2

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

# http на https , если массовый редирект значит он включен на хостинге
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_URI} (.*)index\.php$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^index\.php$ / [L,R=301]

# с www на без www
RewriteCond %{HTTP_HOST} ^www.site.ru.ru$ [NC]
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

# убираем двойной слеш в конце
RewriteCond %{THE_REQUEST} //
RewriteRule .* /$0 [R=301,L]
  
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

# убираем index.php
RewriteBase /
RewriteRule ^(.*)index\.php$ $1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

C http на https

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Вариант 1

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Вариант 2 (не лучший вариант, может быть редирект 302)

RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

Вариант 3

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Вариант 4

RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

C www на без www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

Redirect на другой сайт

Все страницы на другой домен

RewriteEngine On
RewriteCond %{HTTP_HOST} oldsite.ru
RewriteRule (.*) https://newsite.ru/$1 [R=301,L]

Все страницы одного домена на ГЛАВНУЮ страницу другого домена, в начало файла вставьте

RewriteEngine on

RewriteRule ^ https://new-site.ru/  [R=301,L]

Если нужно дополнительное условие на домен:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(?:www\.|)old-site\.ru  [NC]
RewriteRule ^ https://new-site.ru/  [R=301,L]

Каждая страница одного домена на такой же адрес другого url

RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]

Редирект всех страниц кроме главной

RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^([^.]+)$ https://site.ru/$1 [L,R=301]

Перенаправление со старого домена на новый без подключения RewriteEngine

RedirectMatch 301 ^(.*)$ newsite.ru/$1

или

RewriteCond %{QUERY_STRING} ^(.*)services/inzhenernye-izyskaniya/rekonstrukxhiya
RewriteRule ^(.*)$ https://www.geos24.ru/services/inzhenernye-izyskaniya/rekonstrukxhiya/? [R=301,L]

Redirect одной страницы на другую

Redirect 301 /oldpage http://site.ru/newpage

или

RewriteRule ^rassrochka-tinkoff$ / [R=301,L]

или

RewriteCond %{QUERY_STRING} ^(.*)rassrochka-tinkoff 
RewriteRule (.*) https://you-med.ru/$1? [R=301,L]

или

RewriteCond %{QUERY_STRING} ^(.*)stati/zashhita-sredstv-sluxa/COVID-19-i-tugoukhost
RewriteRule ^(.*)$ stati/zashhita-sredstv-sluxa/covid-19-i-tugoukhost? [R=301,L]

Редирект с GET параметрами site.ru/?fid=269&p=content

берем первые параметры id и fid
перенаправляем на страницу блога например:

RewriteCond %{QUERY_STRING} ^fid= [NC]
RewriteRule (.*) https://site.ru/blog/$1? [R=301,L]

Тут на главную страницу

RewriteCond %{QUERY_STRING} ^id= [NC]
RewriteRule (.*) $1? [R=301,L]

Редирект 404 на главную

ErrorDocument 404 /index.php

Блокируем все запросы от нежелательных User Agents, список http://www.user-agents.org/

SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]
<limit get="" post="" head="">
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</limit>

Запрещаем доступ для всех, кроме указанных IP-адресов

ErrorDocument 403 http://www.domainname.com
Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123

Создаем собственные страницы ошибок

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php

Создаем черный список IP адресов

allow from all
deny from 145.186.14.122
deny from 124.15.

Защищаем определенный файл

<files .htaccess>
order allow,deny
deny from all
</files>

Сжимаем элементы с помощью mod_deflate (предположительно работает быстрее)

<ifmodule mod_deflate.c="">
<filesmatch .(js|css)$="">
SetOutputFilter DEFLATE
</filesmatch>
</ifmodule>

Добавляем срок жизни в заголовкам

<filesmatch .(ico|pdf|flv|jpg|jpeg|png|gif|swf)$="">
Header set Expires "Wed, 21 May 2010 20:00:00 GMT"
</filesmatch>

Защищаем паролем папки и файлы

защита паролем файла

<files secure.php="">
AuthType Basic
AuthName "Prompt"
AuthUserFile /pub/home/.htpasswd
Require valid-user
</files>

защита паролем папки

resides
AuthType basic
AuthName "This directory is protected"
AuthUserFile /pub/home/.htpasswd
AuthGroupFile /dev/null
Require valid-user

Для того, чтобы организовать доступ к файлу по паролю, необходимо создать файл .htpasswd и внести в него пару логин-пароль в формате user:password.
Однако в этом случае пароли будут хранится в открытом виде, что не слишком хорошо с точки зрения безопасности. Поэтому оптимальнее пароль зашифровать. Для этого воспользуйтесь сервисами генерации записей в файлы .htpasswd. Например, вот таким http://www.htaccesstools.com/htpasswd-generator/
В нашем примере файл с паролями доступа лежит в корневой директории сайта и называется .htpasswd. Директория указывается от корня сервера и если путь будет некорректным — Apache, не получив доступа к файлу, откажет в доступе к папке любому пользователю — в том чилсе и тому, который ввел правильную пару логин:пароль.

Перенаправляем со старого домена - на новый

    RewriteEngine On
    RewriteRule ^(.*)$ http://www.domainname.com/$1 [R=301,L]

Запрещаем комментарии от пользователей без Referrer

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

Убираем index.html и index.php из URL

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)index\.php$ $1 [R=301,L]
RewriteRule ^(.*)index.html$ $1 [R=301,L]
RewriteRule ^(.*)home.htm$ $1 [R=301,L]
RewriteRule ^(.*)index$ $1 [R=301,L]

Для битрикса убрать index.php

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://example.com/ [R=301,L]

Убираем расширение файла html из URL

RewriteEngine On
RewriteCond %{THE_REQUEST} \s(\S+)\.html
RewriteRule ^ %1 [R=301,L] 
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule (.*) $1.html [L]

Убираем расширение файла php из URL

RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]

или

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]

или

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]


RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

или

RewriteEngine On
RewriteCond %{THE_REQUEST} \s(\S+)\.php
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]

или

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L,QSA]
RewriteCond %{THE_REQUEST} ([^\s]*)\.php(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]

Убираем расширение файла html из URL

RewriteBase /
RewriteRule (.*)\.html$ $1 [R=301,L]

Защищаем сайт Данный код позволяет защитить сайт от scripts enjection и нежелательных модификаций _REQUEST и/или GLOBALS

#Включаем отслеживание сим-ссылок
Options +FollowSymLinks
#Запускаем url_rewriting
RewriteEngine On
#Блокируем все ссылки, содержащие <script>
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
#Блокируем все скрипты, которые пытаются изменить переменные PHP Globals:
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
#Блокируем все скрипты, которые пытаются изменить переменную _REQUEST:
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
#Перенаправляем все подобные на страницу с ошибкой 403 - запрещено
RewriteRule ^(.*)$ index.php [F,L]

Перенаправляем посетителя с помощью директивы RedirectMatch и регулярных выражений !!!

RedirectMatch 301 ^(.*)$ www.domainname.com/$1
RedirectMatch (.*)\.gif$ http://www.myserver.com$1.png
RedirectMatch (.*\.jpg)$ http://www.myanother.com$1

Устанавливаем редирект для URL с GET параметрами (на примере URL: //www.site.com/wp-trackback.php?p=264)

RewriteEngine On
RewriteCond %{QUERY_STRING} ^p=264$
RewriteRule ^wp-trackback\.php$ //www.site.com/article-2242.html? [L,R=301]

Битрикс пагинация редирект с page_1 на PAGE_1

RewriteCond %{QUERY_STRING} (?:^|&)pagen_1=(.*)$
RewriteRule ^(.*)$ /$1?PAGEN_1=%1 [L,R]

или

RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=15$ [NC] 
RewriteRule ^catalog/index\.php$ /newcatalog/? [R=301,L]

А так вариант:

RewriteCond %{QUERY_STRING} ^utm_source= [NC]
RewriteRule (.*) $1? [R=301,L]

Ещё вариант:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^((.*?)&|)utm_
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1?%2 [R=301,NE,L]

Или в роботс

Disallow: /*utm_*=

Редирект для страниц с параметрами, например со страницы site.ru/blog?limitstart=0 на site.ru/blog !!!

RewriteCond %{QUERY_STRING} ^limitstart=0
RewriteRule ^blog http://site.ru/blog? [R=301,L]

Редирект с ?limitstart=0 без указания категории:

RewriteCond %{QUERY_STRING} ^limitstart=0$ [NC]
RewriteRule (.*) $1? [R=301,L]

Убрать вопросительынй знак в конце url site.ru/?

RewriteCond %{THE_REQUEST} ^[^\s]+\s+[^?]*?\?
RewriteCond %{QUERY_STRING} ^$
RewriteRule .? %{REQUEST_URI}? [R=301,L]

Убрать слэш вконце

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

ещё варик

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]

вариант избавления от слэша для страниц с параметрами, на примере страниц с пагинацией site.ru/categoriya?start=5/

RewriteCond %{QUERY_STRING} ^start=(\d+)/
RewriteRule ^(.*) /$1?start=%1 [R=301,L]

или так, применяю чаще всего

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

Сработало на сайтах Битрикса

RewriteCond %{THE_REQUEST} //
RewriteRule .* /$0 [R=301,L]

УБрать несколько слешей вида site.ru/d///f/f

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

В битриксе сделал так, разместил вначале файла

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On

  RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
  RewriteRule . %1/%2 [R=301,L]
  
    RewriteCond %{REQUEST_URI} ^(.*)///(.*)$
  RewriteRule . %1/%2 [R=301,L]
  
  RewriteCond %{THE_REQUEST} \s/+(.*?)/{2,}([^\s]*)
RewriteRule ^ %1/%2 [R=301,L,NE]

  RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$
  RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L]
  
  # Убираем повторяющиеся слеши (/) в URL
    RewriteCond %{REQUEST_URI} ^(.*?)\/{2,}(.*?)$
    RewriteRule . %1/%2 [L,R=301]
    RewriteCond %{THE_REQUEST} //
    RewriteRule .* /$0 [R=301,L]
</ifModule>

Убрать /* в конце url

RewriteRule ^\* https://site.ru/ [R=301,L]

Редирект с 404 и 403 ошибки

ErrorDocument 403 http://site.pro/
ErrorDocument 404 http://site.pro/

Redirect на мобильную версию сайта для моб.устройств

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_USER_AGENT}
(i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) [NC]
RewriteRule ^$ https://m.site.com [R=302,L]
</IfModule>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment