Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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

Надіслати
Поділитися на інших сайтах


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]

 

Надіслати
Поділитися на інших сайтах


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

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

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

Надіслати
Поділитися на інших сайтах


On 1/11/2020 at 9:01 AM, i3bepb said:

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

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

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

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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


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

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

 

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

exit("hello");

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

  • +1 1
Надіслати
Поділитися на інших сайтах


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

В 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://сайт  .

Змінено користувачем Tsyvatsok
Надіслати
Поділитися на інших сайтах


В 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]


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

Змінено користувачем Shureg
Надіслати
Поділитися на інших сайтах


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

Змінено користувачем Tsyvatsok
Надіслати
Поділитися на інших сайтах


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]

 

Надіслати
Поділитися на інших сайтах


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 и не могу понять почему моя версия была нерабочая.

Змінено користувачем Tsyvatsok
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.