Jump to content
  • Sign Up
  • 0

Редирект на https


CyberX
 Share

Question

12 answers to this question

Recommended Posts

  • 0

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

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

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

Link to comment
Share on other sites

  • 0
Только что, klierik сказал:

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

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

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

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

Link to comment
Share on other sites

  • 0

С помощью 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]

 

  • Like 1
Link to comment
Share on other sites

  • 0

Во! Спасибо вам. Код уехал в мою 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/

 

Link to comment
Share on other sites

  • 0

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

#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'а.

  • Like 1
Link to comment
Share on other sites

  • 0
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 и через них устранить ошибку бесконечного редиректа.

Link to comment
Share on other sites

  • 0
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. Доступ к конфигу они вряд ли дадут.

 

  • Like 1
Link to comment
Share on other sites

  • 0
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, но я конечно изучу предложенный вами вариант.

Link to comment
Share on other sites

  • 0
30.03.2019 в 21:07, wwt сказал:

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

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

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

Link to comment
Share on other sites

  • 0

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

 

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

  • Like 1
Link to comment
Share on other sites

  • 0
02.04.2019 в 00:42, wwt сказал:

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

 

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

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy