Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Редирект возвращает 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 но трогать боюсь чтобы индексацию не поломать.

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]

 

Link to post
Share on other sites

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

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

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

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 протоколом по какой то не понятной причине .

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

 

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

exit("hello");

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

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
Link to post
Share on other sites

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

 

 

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
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
Link to post
Share on other sites

3 минуты назад, Tsyvatsok сказал:

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

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

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]

 

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
Link to post
Share on other sites

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

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
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

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.