Skip to content

Instantly share code, notes, and snippets.

@aktaumag
Created May 2, 2023 23:51
Show Gist options
  • Save aktaumag/ed8e224e6e2f76c97744c308fa8431db to your computer and use it in GitHub Desktop.
Save aktaumag/ed8e224e6e2f76c97744c308fa8431db to your computer and use it in GitHub Desktop.
Заметки для настроек сервера, .htaccess, php, js
Заметки для настроек сервера, .htaccess, php, js
@aktaumag
Copy link
Author

aktaumag commented May 2, 2023

Переадресация без слэша на финальный слэш в .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
	
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} !\/$
    RewriteRule ^(.*[^\/])$ https://wseo.pw/$1/ [R=301,L]
    
</IfModule>

Для исключения из переадресации админки битрикса использовать RewriteCond %{REQUEST_URI} !^/bitrix/admin/

    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} !\/$
    RewriteCond %{REQUEST_URI} !^/bitrix/admin/
    RewriteRule ^(.*[^\/])$ https://wseo.pw/$1/ [R=301,L]

@aktaumag
Copy link
Author

aktaumag commented May 3, 2023

Переадресация двойных финальных слэшей на одинарный финальный слэш в .htaccess

Был уверен, что сработает это правило, но оно не сработало для Beget

    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} \/\/$
    RewriteRule ^(.*)\/\/$ https://wseo.pw/$1/ [R=301,L]
    # такое окончание тоже не сработало
    # RewriteCond %{REQUEST_URI} (.+)//$
    # RewriteRule ^ %1/ [L,R=301]

Запросил помощи в техподдержке Beget и они сделали такое правило

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

Оно создавало двойной редирект... в итоге переделал на нижеуказанное и пропадали как финальные, так и внутренние слэши

    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{THE_REQUEST} //
    RewriteRule ^(.*)$ https://wseo.pw/$1 [R=301,L]

@aktaumag
Copy link
Author

aktaumag commented May 3, 2023

с WWW на БЕЗ-WWW

    # Перенаправление на БЕЗ WWW и сразу на HTTPS, по примеру техподдержки TimeWeb
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ https://wseo.pw/$1 [R=301,L]

с БЕЗ-WWW на WWW

    # Перенаправление на WWW и сразу на HTTPS, которое сдела сама техподдержка TimeWeb
    RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

@aktaumag
Copy link
Author

aktaumag commented May 3, 2023

На HTTPS

Для TimeWeb

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

Для Beget

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

Ещё вариант

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

@aktaumag
Copy link
Author

Для удаления index.php

для главной и прочих страниц

    RewriteCond %{THE_REQUEST} ^.*/index.php [NC]
    RewriteCond %{REQUEST_URI} !^/bitrix/admin/ [NC]
    RewriteRule ^(.*)index.php$ https://wseo.pw/$1 [R=301,L]

@aktaumag
Copy link
Author

HSTS заголовок настраивается в .htaccess

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

@aktaumag
Copy link
Author

Полезные ссылки:

Тестировщик
https://htaccess.madewithlove.com/

Примеры основных ситуаций
https://web-optimizator.com/301-redirekt-htaccess/

Проверка цепочек переадресаций:
https://www.websiteplanet.com/ru/webtools/redirected/

Проверка кода ответа и заголовков:
https://bertal.ru/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment