CyberX

Редирект на https

Recommended Posts

Можно ли средствами апач проверить включен ли https://? И можно ли написать в зависимости от ситуации редирект на https:// если он доступен?

Share this post


Link to post
Share on other sites

Здравствуйте

Apache конфигурируется таким образом, что бы отдавать (или не отдавать) страницу по httpS. Посмотрите конфиги веб-сервера, там описаны настройки.

Как правило настраивается и http и httpS, с автоматическим редиректом всех запросов на httpS

Share this post


Link to post
Share on other sites
Только что, klierik сказал:

Здравствуйте

Apache конфигурируется таким образом, что бы отдавать (или не отдавать) страницу по httpS. Посмотрите конфиги веб-сервера, там описаны настройки.

Как правило настраивается и http и httpS, с автоматическим редиректом всех запросов на httpS

Жаль. Спасибо.

Share this post


Link to post
Share on other sites

С помощью modRewrite и .htaccess

два варианта:

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

 

Share this post


Link to post
Share on other sites

Во! Спасибо вам. Код уехал в мою CMS 🙂

Облом. Выполнил переадресацию слишком много раз ... Это что у меня передозировка редиректов? Вот код:

 

##
## RevolveR CMS :: Access configuration
##

AddDefaultCharset utf-8

# Output buffering
php_value output_buffering 4092

# Start rewrite engine
Options +FollowSymLinks
RewriteEngine on

RewriteBase /

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

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

# Secure private
RewriteRule /?\.htaccess$ - [F,L]
RewriteRule ^/?private/key\.ini$ - [F,L]
RewriteRule ^/?private/db_config\.ini$ - [F,L]

# Block something
RewriteCond %{REQUEST_METHOD} ^(TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F]

# Rules to block suspicious URIs
RewriteCond %{QUERY_STRING} ^.*\.(bash|git|hg|log|svn|swp|cvs) [NC,OR]
RewriteCond %{QUERY_STRING} ftp\:  [NC,OR]
RewriteCond %{QUERY_STRING} http\:  [NC,OR]
RewriteCond %{QUERY_STRING} https\:  [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|ê|"|;|\?|\*|=$).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(&#x22;|&#x27;|&#x3C;|&#x3E;|&#x5C;|&#x7B;|&#x7C;).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|concat|insert|union|declare).* [NC]
RewriteRule ^(.*)$ - [F]

# Rules to block foreign characters in URLs
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F).* [NC]
RewriteRule ^(.*)$ - [F]

# Add slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteCond %{REQUEST_FILENAME} .*\.(png|jpg|gif|jpeg)$ [NC]
RewriteRule ^(.*)/$ $1 [R=301,L]

# Allow cache
<ifmodule mod_expires.c>
    <filesmatch ".(jpg|jpeg|gif|png|ico|css|js)$">
        ExpiresActive on
        ExpiresDefault "access plus 5 month"
    </filesmatch>
</ifmodule>

# Allow compression
<IfModule mod_deflate.c>
    <filesMatch "\.(js|css|html|php|jpg|jpeg|png|gif|svg)$">
        SetOutputFilter DEFLATE
    </filesMatch>
</IfModule>

# Block access to the core files
<Files *.php>
    Order Deny,Allow
    Deny from all
</Files>

# Block access to cache files
<Files *.cache>
    Order Deny,Allow
    Deny from all
</Files>

# Allow main router
<Files index.php>
    Order Allow,Deny
    Allow from all
</Files>

# Allow main RSS
<Files rss.php>
    Order Allow,Deny
    Allow from all
</Files>

# Allow statistics
<Files stat.php>
    Order Allow,Deny
    Allow from all
</Files>

# Allow sitemap
<Files sitemap.php>
    Order Allow,Deny
    Allow from all
</Files>

# Allow secure router
<Files secure.php>
    Order Allow,Deny
    Allow from all
</Files>

# Allow search 
<Files search.php>
    Order Allow,Deny
    Allow from all
</Files>

# Add your services 
<Files test.php>
    Order Allow,Deny
    Allow from all
</Files>

# Disable directory browsing
Options All -Indexes

# Rewrite conditions
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite rule
RewriteRule ^(.*)$ index.php [QSA,L]

# Route not found
ErrorDocument 404 /node/404/

 

Share this post


Link to post
Share on other sites

Бесконечный редирект из-за этих строчек?

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

 

У вас спользуется связка Apache+Nginx как я понимаю? Тогда не удивлен что циклический редирект =))) Эти правила будут работать только на чистом апаче. Если перед ним стоит nginx(на котором и настраивают обычно SSL) то редирект с http на https нужно настраивать в конфиге nginx =))) А там нет никаких htaccess 😃

То же самое кстати касается и других моментов. К примеру вы хотите отдавать статику с gzip сжатием, но статику у вас отдает не apache, а nginx 😃 тогда и настройку сжатия нужно делать в конфиге nginx'а, а не в apache 😃

Грубо говоря есть 3 варианта (не считая экзотики типо IIS) реализации веб-серверов:

1) Apache only - .htaccess и mod_rewrite работают в полную силу.

2) Apache+Nginx - очень распространенная конфигурация у хостеров, требующая иногда дополнительной настройки руками под каждый движок. Если не используется SSL то с редиректами все ОК и .htaccess и mod_rewrite работают в штатном режиме. Но некоторые другие вещи возможно придется настраивать в конфиге nginx'а.

3) Nginx+PHP-FPM - все настраивается в конфиге nginx'а.

Share this post


Link to post
Share on other sites
26.03.2019 в 16:53, wwt сказал:

Бесконечный редирект из-за этих строчек?


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

 

У вас спользуется связка Apache+Nginx как я понимаю? Тогда не удивлен что циклический редирект =))) Эти правила будут работать только на чистом апаче. Если перед ним стоит nginx(на котором и настраивают обычно SSL) то редирект с http на https нужно настраивать в конфиге nginx =))) А там нет никаких htaccess 😃

То же самое кстати касается и других моментов. К примеру вы хотите отдавать статику с gzip сжатием, но статику у вас отдает не apache, а nginx 😃 тогда и настройку сжатия нужно делать в конфиге nginx'а, а не в apache 😃

Грубо говоря есть 3 варианта (не считая экзотики типо IIS) реализации веб-серверов:

1) Apache only - .htaccess и mod_rewrite работают в полную силу.

2) Apache+Nginx - очень распространенная конфигурация у хостеров, требующая иногда дополнительной настройки руками под каждый движок. Если не используется SSL то с редиректами все ОК и .htaccess и mod_rewrite работают в штатном режиме. Но некоторые другие вещи возможно придется настраивать в конфиге nginx'а.

3) Nginx+PHP-FPM - все настраивается в конфиге nginx'а.

Спасибо, умнейший человек. Попробую поинтересоваться у хостера есть ли доступ к конфигам. Мне бы в идеале из корня проекта это сделать, nginx на сколько я понимаю не позволяет это сделать ... Может есть возможность достучаться до разработчиков nginx и apache и через них устранить ошибку бесконечного редиректа.

Share this post


Link to post
Share on other sites
27.03.2019 в 16:02, CyberX сказал:

Может есть возможность достучаться до разработчиков nginx и apache и через них устранить ошибку бесконечного редиректа.

А тут нет никакой ошибки. Если взять вышеуказанное правило то там происходит следующее:

Приходит запрос по https на 443 порт Nginx'а, он обрабатывает запрос  и передает его апачу уже по http, без шифрования. Мод реврайт проверяет порт соединения и если он не 443 он делает редирект на 443 порт =))) Запрос опять летит на Nginx и все повторяется =)))

Достаточно понимать что Nginx в данном случае проксирующий сервер и именно он слушает порты 80 и 443, а апачу передает запросы по другому порту(какой настроил вебмастер), обычно это 8080 или 88.

Чтобы избежать такой проблемы нужно либо убирать один из серверов, либо настраивать их так чтобы они оба работали по https, вот по этому поводу можно почитать https://reinout.vanrees.org/weblog/2017/05/02/https-behind-proxy.html

 

В вашем же случае думаю будет достаточно попросить админов хостинга прописать вашему сайту редирект с http на https в конфиге Nginx. Доступ к конфигу они вряд ли дадут.

 

Share this post


Link to post
Share on other sites
29.03.2019 в 12:03, wwt сказал:

А тут нет никакой ошибки. Если взять вышеуказанное правило то там происходит следующее:

Приходит запрос по https на 443 порт Nginx'а, он обрабатывает запрос  и передает его апачу уже по http, без шифрования. Мод реврайт проверяет порт соединения и если он не 443 он делает редирект на 443 порт =))) Запрос опять летит на Nginx и все повторяется =)))

Достаточно понимать что Nginx в данном случае проксирующий сервер и именно он слушает порты 80 и 443, а апачу передает запросы по другому порту(какой настроил вебмастер), обычно это 8080 или 88.

Чтобы избежать такой проблемы нужно либо убирать один из серверов, либо настраивать их так чтобы они оба работали по https, вот по этому поводу можно почитать https://reinout.vanrees.org/weblog/2017/05/02/https-behind-proxy.html

 

В вашем же случае думаю будет достаточно попросить админов хостинга прописать вашему сайту редирект с http на https в конфиге Nginx. Доступ к конфигу они вряд ли дадут.

 

Все бы хорошо, но я так сильно привык Apache, что даже не охотп изучать nginx потому что редко предоставляет доступ к этим настройкам, что усложняет корректную настройку прямо из корня public directory, но я конечно изучу предложенный вами вариант.

Share this post


Link to post
Share on other sites

Как вариант делайте проверку в php, если соединение не защищено редиректите =)))

Share this post


Link to post
Share on other sites
30.03.2019 в 21:07, wwt сказал:

Как вариант делайте проверку в php, если соединение не защищено редиректите =)))

Это не вариант. Не известно есть ли у домена зеркало на https потому что php об этом не знает. У меня же CMS с инсталлятором написана и я делаю это не для одного сайтика, а для всех пользователей системы и для всех серверов на которой она будет работать.

Можно было бы, конечно, использовать запрос curl для проверки есть ли зеркало доступное по https, но мне кажется что это фиговенький вариант.

Share this post


Link to post
Share on other sites

В установщике задавать вопрос пользователю вы будете работать по https или нет =))) И результат сохранить в настройках, где опять же можно изменить даже на установленной системе 😃

 

А вообще вполне достаточно чтобы заготовка редиректа была в htaccess, грубо говоря классический вариант. Если у пользователя такая ситуация как у вас ему придется решать её самому. Самое главное редирект по умолчанию закомментировать, и написать комментарий. Так обычно делают все разработчики CMS

Share this post


Link to post
Share on other sites
02.04.2019 в 00:42, wwt сказал:

В установщике задавать вопрос пользователю вы будете работать по https или нет =))) И результат сохранить в настройках, где опять же можно изменить даже на установленной системе 😃

 

 А вообще вполне достаточно чтобы заготовка редиректа была в htaccess, грубо говоря классический вариант. Если у пользователя такая ситуация как у вас ему придется решать её самому. Самое главное редирект по умолчанию закомментировать, и написать комментарий. Так обычно делают все разработчики CMS

Видимо так и сделаю, но все таки хотелось бы минимизировать параметры и настройки потому что у меня CMS все делает за человека уже так как самое оптимальное и там даже минимум настроек, если посмотрите.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Member Statistics

    46,700
    Total Members
    3,128
    Most Online
    VovkaKrut
    Newest Member
    VovkaKrut
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.