.htaccess — Часто-используемые решения

Редирект

301 редирект с фиксированным адресом

Redirect 301 /addr_in https://example.ru/?utm_source=tupe_data&utm_medium=organic

Классический набор правил (https, без www, с индексов на /)

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ 
RewriteRule ^(.*)index\.(php|html|htm)$ https://%{HTTP_HOST}/$1 [R=301,L]

Все правила ставятся после

RewriteEngine On

Перенаправить с HTTP на HTTPS (собрал все варианты с которыми встречался)

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

или

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

или

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

или

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

или

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

Перенаправить с поддомена www

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

Перенаправить со страница /index.php или /index.htm или /index.html

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ 
RewriteRule ^(.*)index\.(php|html|htm)$ https://%{HTTP_HOST}/$1 [R=301,L]

Перенаправить на index.php если не найден файл

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Изменение в заголовке «Content-Type» к примеру файлам с расширением «phar», чтобы их можно было скачивать

<IfModule mod_headers.c>
	<FilesMatch "\.(?i:phar)$">
	ForceType application/octet-stream
	</FilesMatch>
</IfModule>

Перенаправить на другой хост, кроме определенного IP:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain1\.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^131\.221\.61\.91
RewriteRule ^(.*)$ https://domain2.com/$1 [R=301,L]