Forums / National / Russian / Тех. поддержка / Редирект на HTTPS

циклическая ссылка

prostogorod
#1 2016-02-01 15:00

У меня работает переадрисация с http на https

Если набрать http://domain.com перенаправляет на https://domain.com

А если набрать http://domain.com/articles/  перенаправляет неправильно на https://domain.com/index.php?rwr=articles/

В .htaccess есть две такие строчки связаные с index.php?rwr

RewriteRule ^system/?$  index.php?rwr=system [QSA,NC,NE,L]
RewriteRule ^([^?]+) index.php?rwr=$1 [QSA,NC,NE,L]

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

This post was edited by Macik (2016-02-01 19:43, 8 years ago)
Yusupov
#2 2016-02-01 15:09

В файле .htaccess прописываем:

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

 

prostogorod
#3 2016-02-01 15:23

У меня это прописано, только так

# RewriteCond %{HTTP:SSL} !1
# RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]

Как Вы указали, на этой странице обнаружена циклическая переадресация

У меня включен URL Editor и в конце урла "/"

Прошу обратить внимание на этот код в урле

index.php?rwr

 

Macik
#4 2016-02-01 19:40
  1. параметр `rwr` используется для обработки нестандартных запросов к сайту, точнее сказать для применения дополнительных правил роутинга внутри Cotonti, и активно используется тем самым плагином `urleditor`. 
    Работает это так:
      -  если не одно из стандартных правил, описанных в htaccess не сработало, т.е. мы запросили что-то кроме главного обработчика `index.php` (или иных admin, login и пр.), то наш запрос к сайту  передается в переменную `rwr` и уходит по стандартной схеме в `index.php`
      -  если в системе определен какой-либо роутер (обработчик нестандерных запросов), как например `urleditor` — он разбирает «непонятную» строку (см. функцию `
    cot_apply_rwr()`) и сам формирует входящие параметры так, как если бы это был обычный запрос с параметрами (index.php?e=page&c=articles).
  2. Для проверки того, что этот параметр не влияет на циклическую ссылку — можно закоментиовать указанную строку 
    	RewriteRule ^([^?]+) index.php?rwr=$1 [QSA,NC,NE,L]
        
    и убедится.
  3. Для выяснения проблем с `Rewrite` модулем полезно включить дополнительный лог:
        RewriteLog "logs/rewrite_error.log"
        RewriteLogLevel 5
    	
    Это работает если прописать в конфиг самого сервера (в .htaccess работать не будет). Работает для apache v2.2 (!! для 2.4 изменился синтаксис — смотрите в доках)
    Тогда увидим что-то типа:
    [www/sites/ccke/] applying pattern '(.*)' to uri 'articles'
    [www/sites/ccke/] RewriteCond: input='' pattern='!1' => matched
    [www/sites/ccke/] rewrite 'articles' -> 'https://localhost/ccke/articles'
    [www/sites/ccke/] explicitly forcing redirect with https://localhost/ccke/articles
    [www/sites/ccke/] trying to replace prefix C:/dvp/VertrigoServ/www/sites/ccke/ with /ccke
    [www/sites/ccke/] escaping https://localhost/ccke/articles for redirect
    [www/sites/ccke/] redirect to https://localhost/ccke/articles [REDIRECT/301]

    И далее такое по кругу.
    Проблема в постоянном срабатывании условия 

    RewriteCond: input='' pattern='!1' => matched
    Т.е. ваша запись `RewriteCond %{HTTP:SSL} !1 ` не корректна, переменная `%{HTTP:SSL}` всегда пустая.
     
  4. Булат в своем посте привел рабочий вариант — попробуйте его.
    RewriteCond %{HTTPS} !=on
https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
This post was edited by Macik (2016-08-14 10:42, 7 years ago)
Denisbox
#5 2016-03-02 13:58
#41348 prostogorod:

У меня это прописано, только так

# RewriteCond %{HTTP:SSL} !1
# RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]

Как Вы указали, на этой странице обнаружена циклическая переадресация

У меня включен URL Editor и в конце урла "/"

Прошу обратить внимание на этот код в урле

index.php?rwr

 

Этот пример для Apache, у вас Nginx+Apache судя по ошибке о циклической ссылке

contact: fonts (at) otlab . ru
prostogorod
#6 2016-03-04 13:04
#41349 Macik:
  1. параметр `rwr` используется для обработки нестандартных запросов к сайту, точнее сказать для применения дополнительных правил роутинга внутри Cotonti, и активно используется тем самым плагином `urleditor`. 
    Работает это так:
      -  если не одно из стандартных правил, описанных в htaccess не сработало, т.е. мы запросили что-то кроме главного обработчика `index.php` (или иных admin, login и пр.), то наш запрос к сайту  передается в переменную `rwr` и уходит по стандартной схеме в `index.php`
      -  если в системе определен какой-либо роутер (обработчик нестандерных запросов), как например `urleditor` — он разбирает «непонятную» строку (см. функцию `
    cot_apply_rwr()`) и сам формирует входящие параметры так, как если бы это был обычный запрос с параметрами (index.php?e=page&c=articles).

 

Тогда, не могу понять, при наведении на ссылку в браузере вижу

http://site.ru/news/v-sele-preobrazhenka

, после клика на ссылку в строке url браузера

http://site.ru/index.php/?rwr=news/v-sele-preobrazhenka

Почему?

Macik
#7 2016-03-05 16:41
#41456 prostogorod:
, после клика на ссылку в строке url браузера
http://site.ru/index.php/?rwr=news/v-sele-preobrazhenka

Почему?

Потому, что что-то отрабатывает не в полной мере.
Вы не привели, ни логов, ниверсий используемого софта, поэтому о причинах можно только гадать.
 

Вот для изучения мой лог:

# Запрошенный ресурс news/124337
RewriteBase "/cotwork"
[/initial] (3) [perdir cotwork/] add path info postfix: cotwork/news -> cotwork/news/124337
[/initial] (3) [perdir cotwork/] strip per-dir prefix: cotwork/news/124337 -> news/124337
[/initial] (3) [perdir cotwork/] applying pattern '^(en|ru|de|nl|zh_TW|i_sami-no)/(.*)' to uri 'news/124337'
[/initial] (3) [perdir cotwork/] add path info postfix: cotwork/news -> cotwork/news/124337
[/initial] (3) [perdir cotwork/] strip per-dir prefix: cotwork/news/124337 -> news/124337
[/initial] (3) [perdir cotwork/] applying pattern '^admin/([a-z0-9]+)' to uri 'news/124337'
[/initial] (3) [perdir cotwork/] add path info postfix: cotwork/news -> cotwork/news/124337
[/initial] (3) [perdir cotwork/] strip per-dir prefix: cotwork/news/124337 -> news/124337
[/initial] (3) [perdir cotwork/] applying pattern '^(admin|login|message)(/|\\?|$)' to uri 'news/124337'
[/initial] (3) [perdir cotwork/] add path info postfix: cotwork/news -> cotwork/news/124337
[/initial] (3) [perdir cotwork/] strip per-dir prefix: cotwork/news/124337 -> news/124337
[/initial] (3) [perdir cotwork/] applying pattern '^system/?$' to uri 'news/124337'
[/initial] (3) [perdir cotwork/] add path info postfix: cotwork/news -> cotwork/news/124337
[/initial] (3) [perdir cotwork/] strip per-dir prefix: cotwork/news/124337 -> news/124337
[/initial] (3) [perdir cotwork/] applying pattern '^([^?]+)' to uri 'news/124337'
[/initial] (4) [perdir cotwork/] RewriteCond: input='cotwork/news' pattern='!-f' => matched
[/initial] (4) [perdir cotwork/] RewriteCond: input='cotwork/news' pattern='!-d' => matched
[/initial] (2) [perdir cotwork/] rewrite 'news/124337' -> 'index.php?rwr=news/124337'
[/initial] (3) split uri=index.php?rwr=news/124337 -> uri=index.php, args=rwr=news/124337
[/initial] (3) [perdir cotwork/] add per-dir prefix: index.php -> cotwork/index.php
[/initial] (2) [perdir cotwork/] trying to replace prefix cotwork/ with /cotwork
[/initial] (5) strip matching prefix: cotwork/index.php -> index.php
[/initial] (4) add subst prefix: index.php -> /cotwork/index.php
[/initial] (1) [perdir cotwork/] internal redirect with /cotwork/index.php [INTERNAL REDIRECT]
[/initial/redir#1] (3) [perdir cotwork/] strip per-dir prefix: cotwork/index.php -> index.php
[/initial/redir#1] (3) [perdir cotwork/] applying pattern '^(en|ru|de|nl|zh_TW|i_sami-no)/(.*)' to uri 'index.php'
[/initial/redir#1] (3) [perdir cotwork/] strip per-dir prefix: cotwork/index.php -> index.php
[/initial/redir#1] (3) [perdir cotwork/] applying pattern '^admin/([a-z0-9]+)' to uri 'index.php'
[/initial/redir#1] (3) [perdir cotwork/] strip per-dir prefix: cotwork/index.php -> index.php
[/initial/redir#1] (3) [perdir cotwork/] applying pattern '^(admin|login|message)(/|\\?|$)' to uri 'index.php'
[/initial/redir#1] (3) [perdir cotwork/] strip per-dir prefix: cotwork/index.php -> index.php
[/initial/redir#1] (3) [perdir cotwork/] applying pattern '^system/?$' to uri 'index.php'
[/initial/redir#1] (3) [perdir cotwork/] strip per-dir prefix: cotwork/index.php -> index.php
[/initial/redir#1] (3) [perdir cotwork/] applying pattern '^([^?]+)' to uri 'index.php'
[/initial/redir#1] (4) [perdir cotwork/] RewriteCond: input='cotwork/index.php' pattern='!-f' => not-matched
[/initial/redir#1] (1) [perdir cotwork/] pass through cotwork/index.php

Т.е. у меня Apache осуществляет внутренний редирект, в строке браузера остается запрошенный URL: 

site.test/cotwork/news/124337

 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
Roffun
#8 2016-03-11 18:50

А где можно убрать порт из адреса ?

В canonical url и в карту сайта попадает :443 

Добавлено 2 минуты спустя:

Похоже обсуждается здесь

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

Получите SSL-сертификат от Let’s Encrypt полностью бесплатно через нашу панель управления.

Мы рады сообщить, что теперь пользователи нашего хостинга прямо из панели управления могут бесплатно заказать SSL-сертификат, предоставляемый некоммерческой организацией Let's Encrypt. Сертификат будет автоматически выпущен и установлен для вашего домена, а в последствии будет автоматически продлеваться. Для заказа Let's Encrypt сертификата не требуется выделенный IP-адрес. 

Выпуск, установка и дальнейшее продление сертификата - абсолютно бесплатны!

Добавлено 6 месяцев спустя:

На своем сайте для правильной обработки https и удаления дублей в виде www , index.php, index.html, index.htm , слеша в конце, прописываю такие условия:

AddDefaultCharset utf-8  
RewriteEngine On
# ==== РЕДИРЕКТ НА HTTPS ====
 RewriteCond %{HTTPS} off
 RewriteCond %{HTTP:X-Forwarded-Proto} !https
 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ==== РЕДИРЕКТ НА HTTPS БЕЗ WWW ====
 RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
 RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [L,R=301]

# ==== УБРАТЬ СЛЕШ В КОНЦЕ URL ====
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.+)/$ /$1 [R=301,L]

# ==== УБРАТЬ В КОНЦЕ URL INDEX.(PHP|HTML|HTM) ====
 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
 RewriteRule ^(.*)$ https://%{HTTP_HOST} [R=301,L]

 

Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
This post was edited by Roffun (2019-03-05 21:34, 5 years ago)
Kailo
#9 2016-10-27 19:06

У меня эти директивы не работают, работают такие:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
 
# Prevent to load sensible data
<FilesMatch "\.(dat|tpl|inc)$">
order deny,allow
deny from all
</FilesMatch>
 
# Sitemap shortcut
RewriteRule ^sitemap\.xml$ index.php?r=sitemap [L]
 
# Admin area and message are special scripts
RewriteRule ^admin/([a-z0-9]+) admin.php?m=$1 [QSA,NC,NE,L]
RewriteRule ^(admin|login|message)(/|\?|$) $1.php [QSA,NC,NE,L]
 
# System category has priority over /system folder
RewriteRule ^system/?$  index.php?rwr=system [QSA,NC,NE,L]
 
# All the rest goes through standard rewrite gateway
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]+) index.php?rwr=$1 [QSA,NC,NE,L]
 
<IfModule mod_headers.c>
Header always append X-Frame-Options SAMEORIGIN
</IfModule>

 

Roffun
#10 2016-10-27 19:21
#41500 Roffun:  
 RewriteEngine On
# ==== РЕДИРЕКТ НА HTTPS ====
 RewriteCond %{HTTPS} off
 RewriteCond %{HTTP:X-Forwarded-Proto} !https
 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

В чем отличие ?

#42252 Kailo:

У меня эти директивы не работают, работают такие:

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

 

 

Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
Kailo
#11 2016-11-01 22:24

Во всем остальном, за исключением www. Слеш и индекс урледитором убираются. Такие директивы с ним без глюков работают:

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

#  Redirect at HTTPS without WWW 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [L,R=301]

# Prevent to load sensible data
<FilesMatch "\.(dat|tpl|inc)$">
order deny,allow
deny from all
</FilesMatch>

# Sitemap shortcut
RewriteRule ^sitemap\.xml$ index.php?r=sitemap [L]

# Admin area and message are special scripts
RewriteRule ^admin/([a-z0-9]+) admin.php?m=$1 [QSA,NC,NE,L]
RewriteRule ^(admin|login|message)(/|\?|$) $1.php [QSA,NC,NE,L]

# System category has priority over /system folder
RewriteRule ^system/?$  index.php?rwr=system [QSA,NC,NE,L]

# All the rest goes through standard rewrite gateway
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]+) index.php?rwr=$1 [QSA,NC,NE,L]

<IfModule mod_headers.c>
Header always append X-Frame-Options SAMEORIGIN
</IfModule>

А сертификат бесплатный на три года без привязки к хостингу я здесь получил https://startssl.com

This post was edited by Kailo (2016-11-02 08:56, 7 years ago)