@Eugeny120

Проблема с редиректом Bitrix подставляет 80 порт. Как поправить?

Сайт переехал на https, но при попытке зайти с http редиректит на https и добавляет :80 в конце и соответственно не открывается:

[root@tdlorien site_avaliable]# curl -I www.site.ru HTTP/1.1 301 Moved Permanently
Server: nginx/1.16.1
Date: Wed, 11 Nov 2020 12:24:54 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: keep-alive
Location: https://www.site.ru:80/
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN

Кусок .htaccess


Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !/bitrix/admin/1cv7_exchange.php
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]


В чем может быть проблема, где копать?
  • Вопрос задан
  • 996 просмотров
Решения вопроса 1
anton99zel
@anton99zel Куратор тега 1С-Битрикс
29а класс средней школы №7
Рабочий вариант с учетом 1С, https, без www
spoiler
Options -Indexes 
ErrorDocument 404 /404.php
php_flag display_errors on
php_value error_reporting 6143
php_value memory_limit 256M

RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://mysite.ru/ [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ https://mysite.ru/ [R=301,L]
RewriteCond %{REQUEST_URI} !^/bitrix/admin/1cv7_exchange\.php$
RewriteCond %{SERVER_PORT} !^443$     [OR]
RewriteCond %{HTTP_HOST} ^www\.       [NC]
RewriteRule ^(.*)$ https://mysite.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} //
# Проверяем, повторяется ли слеш (//) более двух раз.
RewriteRule .* /$0 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301,L]

<IfModule mod_php7.c>
  php_flag session.use_trans_sid of
  php_value display_errors 1
  #php_value mbstring.internal_encoding UTF-8
</IfModule>

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
RewriteCond %{THE_REQUEST} /(.*)index.php.*$
RewriteCond %{THE_REQUEST} !bitrix/admin/
RewriteRule .* /%1 [R=301,L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
  RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
  RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]

</IfModule>

<IfModule mod_dir.c>
  DirectoryIndex index.php index.html
</IfModule>

<IfModule mod_expires.c>
  ExpiresActive on
  ExpiresByType image/jpeg "access plus 3 day"
  ExpiresByType image/gif "access plus 3 day"
  ExpiresByType image/png "access plus 3 day"
  ExpiresByType text/css "access plus 3 day"
  ExpiresByType application/javascript "access plus 3 day"  
</IfModule>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
связано это с настройкой вашей машины и как правило в 99% это именно в связке nginx + apache где на бэке у вас 80 порт с подменой протокола, по факту вот такая шляпа и происходит.
Проблема заключается в том что в заголовке reffrey уже стоит порт.
1. вариант поставитьбэк на https
в таком случае вам не нужно будет подставлять порт и все будет нормально но так почему-то не делают, притом во всех манах предпочитают способ с костылем и проблемами нежели нормально перенаправлять
http-http
https-https
нет нужно крутить костыли.
2. вариант существует около 30 видов редиректов на https вам нужно подобрать тот что подходит вам. ( не забывайте отключить в своем браузере кеш редиректов) иначе вы просто не узнаете что все работает.
3. https://klondike-studio.ru/standards/standartnyy-h... возьмите за основу вот этот файлик. так же если у вас именно проблема с обменом то она тут решена, причина тут в том что в GET есть https и он редиректится.
Ответ написан
В Вашем случае может сработать простой способ без настройки nginx и apache.
Нужно в файле dbconn.php добавить строки:
if (($pos = strpos($_SERVER['HTTP_HOST'], ':')) !== false)
{
$HTTP_HOST = $_SERVER['HTTP_HOST'] = substr($_SERVER['HTTP_HOST'],0,$pos);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы