Jump to content
Sign in to follow this  
Tsyvatsok

Редирект возвращает 200 код вместо 301

Recommended Posts

Столкнулся с такой проблемой: на самом сайте стоит ssl сертификат и редирект с www на без www.

Вот по сути все редиректы в htaccess:

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Однако, 301 код возвращают только запросы на www. адреса (неважно какой протокол). В самом config.php в качестве HTTP_SERVER переменной был задан сайт сразу с https протоколом, тот же адрес был продублирован в HTTPS_SERVER. Замена в HTTP_SERVER переменной протокола на http ничего не изменяет вообще. Пробовал уже и сам писать редиректы и что только не делал, единственное что помогло - заменить HTTP_SERVER адрес на https://www. чтобы правило автоматом работало на все https протоколы и в предпоследней строчке данного htaccess заменить условие на %{HTTPS_HOST} ... Но метод очень кривой и делать по 1000 редиректов не камильфо. Может кто знает в чем может быть проблема? Пытался отключить в настройке сервера "Использовать SSL" - все летит к чертям (если только в HTTP_SERVER не стоит протокол https заранее). Думаю может ещё дело в SEO или в кэше SEO но трогать боюсь чтобы индексацию не поломать.

Share this post


Link to post
Share on other sites
10 часов назад, Tsyvatsok сказал:

Вот по сути все редиректы в htaccess

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

 

10 часов назад, Tsyvatsok сказал:

RewriteBase /

и 

 

10 часов назад, Tsyvatsok сказал:

RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]

 

вот эти строки:

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

 

Share this post


Link to post
Share on other sites

HTTP_SERVER - это константа для адреса http

HTTPS_SERVER - это константа для https

Менять это не стоит, так специально задумано, чтобы затем в админке вкл/выкл SSL

Share this post


Link to post
Share on other sites
On 1/11/2020 at 9:01 AM, i3bepb said:

HTTP_SERVER - это константа для адреса http

HTTPS_SERVER - это константа для https

Менять это не стоит, так специально задумано, чтобы затем в админке вкл/выкл SSL

Попробовал перенести строки - все равно возвращает код 200. Насчет констант я понимаю, но на сервере константа HTTP уже прописана с HTTPS протоколом по какой то не понятной причине .

Share this post


Link to post
Share on other sites

Даже если полностью закоментить RewriteEngine все равно идет редирект с http на https, по идее где то внутри OpenCart'а идет редирект с кодом 200, но никак не могу найти где именно.

Share this post


Link to post
Share on other sites
14 часов назад, Tsyvatsok сказал:

Даже если полностью закоментить RewriteEngine все равно идет редирект с http на https, по идее где то внутри OpenCart'а идет редирект с кодом 200, но никак не могу найти где именно.

 

А попробуйте сделать test.php в корне сайта и в нем просто:

exit("hello");

а затем перейти в браузере на http://ваш домен/test.php и посмотрите будет перекидывать или нет. Т.е. таким образом мы избавимся от Opencart-а и проверим веб-сервер. Если будет перекидывать то проблема в настройках веб-сервера, а если не будет тогда да, где движок делает редирект

Share this post


Link to post
Share on other sites

Сделал как сказали, в итоге такой результат:

В htaccess строчки

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

1)ЗАКОМЕНЧЕНЫ. Результат:

      http://сайт/test.php редиректа НЕТ

      http://www.сайт/test.php - без редиректа

      http://сайт/ - первый раз без редиректа, если нажать F5 идет редирект на https://

      http://www.сайт - без редиректа, F5 ничего не дает.

2)РАСКОМЕНЧЕНЫ

       http://сайт/test.php редиректа НЕТ

       http://www.сайт/test.php  - редирект на  https://сайт/test.php, причем в таком порядке

image.png.acf205aaf726489dd4e086dff5cd6f01.png 

       http://сайт/ - первый раз загружается без редиректа, если нажать F5 идет редирект на https://. Что за фигня... Причем спецом отключил кэширование редиректов   и все равно подобное поведение

image.png.18d04792af228ea8f50ce3163c056a4a.png 

       http://www.сайт/ - сразу редиректит на https://сайт  .

Edited by Tsyvatsok

Share this post


Link to post
Share on other sites

Странно, я ваш сайт смотрю - и все нормально работает. Может, уже пофиксили?

 

 

Share this post


Link to post
Share on other sites
В 11.01.2020 в 02:00, Tsyvatsok сказал:

Однако, 301 код возвращают только запросы на www. адреса

Я недочитал. Так правильно, у вас редирект только для www адресов.
Обычные не делали. Я то думал, у вас вообще редирект не работает :-)
Вот так попробуйте
 

RewriteBase /

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

RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Еще вариант


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


С разными серверами может по разному работать

Edited by Shureg

Share this post


Link to post
Share on other sites

Разве (www)? не значит либо есть www, либо нет?

Share this post


Link to post
Share on other sites
31 minutes ago, Shureg said:

Я недочитал. Так правильно, у вас редирект только для www адресов.
Обычные не делали. Я то думал, у вас вообще редирект не работает :-)
Вот так попробуйте
 


RewriteBase /

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

RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Еще вариант


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


С разными серверами может по разному работать

Пробовал верхний вариант, редиректит рекурсивно

 image.png.6232cf06bf288e8c19e78f9d61ffc8ab.png

 

Нижний вариант вроде работает, за что спасибо Вам огромное, но не перенаправляет с www на без www

Edited by Tsyvatsok

Share this post


Link to post
Share on other sites
3 минуты назад, Tsyvatsok сказал:

Пробовал верхний вариант, редиректит рекурсивно

https://qna.habr.com/q/174797

Share this post


Link to post
Share on other sites
6 минут назад, Tsyvatsok сказал:

Нижний вариант вроде работает, за что спасибо Вам огромное, но не перенаправляет с www на без www

Вот так должно быть, все будет работать
 

RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTP:X-Forwarded-proto} !^https$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

 

Share this post


Link to post
Share on other sites
20 minutes ago, Shureg said:

Вот так должно быть, все будет работать
 


RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTP:X-Forwarded-proto} !^https$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

 

Огромное Вам спасибо! А в чем была проблема, можете подсказать? Поскольку, regex я юзал как в доках описано, да и переменные все правильные были. Дело в версии апача?

Просто разбирался долго очень и писал разными путями и через %{HTTP} off и не могу понять почему моя версия была нерабочая.

Edited by Tsyvatsok

Share this post


Link to post
Share on other sites

Да не было у вас никакой проблемы. Вы просто не сделали редирект http-https (сделали только www - https), но искали его.

Share this post


Link to post
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.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   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.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.