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

Ошибка в opencart: HTTP_SERVER с www и без (ajax запросы)


markimax

Recommended Posts

Все наверно замечали, что если константа HTTP_SERVER отличается от $_SERVER["HTTP_HOST" например www.stye.com и без www, то не работают ajax запросы, тако вот это ошибка в opencart.

Лечиться так: прописываете в своих модулях:

        if (isset($_SERVER["HTTP_HOST]) && $_SERVER["HTTP_HOST"]!="") {
            $host = $_SERVER["HTTP_HOST"];
            if (substr($host, -1)!='/') $host.="/";

              if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
                if (HTTPS_SERVER!=$host) {

                    if (substr($host, 0, 5)!='https') $host = "https://".$host;

                    $this->config->set('config_ssl', $host);
                }
            }
            else {

                if (substr($host, 0, 4)!='http') $host = "http://".$host;

                if (HTTP_SERVER!=$host) {
                    $this->config->set('config_url', $host);
                }
            }

        }

И ajax запросы модуля начинают прекрасно работать

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

1. это не ошибка opencart

2. лечится mod_rewrite

 

Не соглашусь,  ошибка, так как жестко привязано к константе HTTP_SERVER , ajax запросы должны работать как с www так и без, и без изменений config.php  или .htaccess

 

И кто лечить должен то ;) ? Пользователь. А что у всех пользователей такая квалификация, что могут "пролечить". Вы то и сами знаете какая :) Нужно сразу все делать за них.

 

P.S. Многие покупатели по старинке в браузере вбивают url с www, и если пользователь не "вылечил" .htaccess, то купить он ничего не сможет и все ajax скрипты перестают работать, поэтому надо позаботиться о них и просто вставить код выше в свои модули.

P.S.S. to freelancer: может позаботишься о них и вставишь код в SeoPro ;) ?

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

если пользователь зашел на домен с www, а ajax  пытается отослать на домен без www, то никакие трюки тут не помогут

 

Как не помогут? Вон код выше. Зайди на мой демо сайт с http://www.opencartadmin.com с www и без,и нажми на "Заказать обратный звонок" и ajax нормально все отрабатывает и там и там, с этим кодом, а без него с www - не работает

 

P.S. to freelancer: Корзина с www не работает, для работы её нужно вставить код в SeoPro ;)

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

на демо ajax уходит на тот же домен

думаю проще прописать редирект 1 раз в 1 файле чем постоянно в новых модулях

 

Ну правильно и работает с www и без.

 

Проще то проще, но кто прописывать будет ;) Еще раз повторюсь пользователь, а это не допустимо исходя из статистики квалификации пользователей.

 

Вот если бы в SeoPro, код раз прописать ;)

Да и не очень тяжело прописать этот код в модуле один раз. Ctrl-C -> Ctrl-V

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

не все запросы проходят через seo_pro.

Он же в index.php "прописан". В __construct его (код) и всё.

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

А зачем вообще использовать $_SERVER для формирования URL, если 

1) У нас есть константа

2) Согласно стилистике OpenCart указывается относительный, а не абсолютный URL

3) Есть класс Url с методом link, который генерирует правильные URL

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

А зачем вообще использовать $_SERVER для формирования URL, если 

1) У нас есть константа

2) Согласно стилистике OpenCart указывается относительный, а не абсолютный URL

3) Есть класс Url с методом link, который генерирует правильные URL

 

1. Она не работает с www

2. Иногда бывает, даже 1 раз из 100, будет достаточно, чтобы поднять флейм в тех .поддержке из ничего (ну кому я рассказываю, вы и сами знаете, как разработчик ;) )

3. На основе $this->config->get('config_url'); и если с www, то ajax запросы перестают работать

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

ajax запросы должны работать как с www так и без

 

окстись.

это ДВА РАЗНЫХ ДОМЕНА. со всеми вытекающими.

 

http://en.wikipedia.org/wiki/Same_origin_policy

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

А зачем так извращаться, если можно (и нужно) просто с самого начала сделать склейку доменов с ввв и без ввв? Тогда ведь мы с одной стороны избегаем ситуации, когда юзер заходит на ввв, при том что основной сайт без ввв, и с другой стороны - устраняем дубли ввв-домена для поисковиков, что достаточно важно для нормального ранжирования.

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

домены разные, не вопрос, потому и запросы не проходят и самый правильный вариант решения склейка средствами веб сервера, но я подумал, что можно добавить код в seoPro, который бы генерировал ссылки не опираясь на константу HTTP_SERVER, а исходя из текущего домена. только где-то должны быть подводные камни

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

 

В .htaccess добавь:
RewriteCond %{HTTP_HOST} !^www

 

редирект на домен с www. мне так уже писали пару человек, почему ajax не работает. да потому что видят такие вот "добавь", при этом у пользователя в конфиге HTTP_SERVER без WWW

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

редирект на домен с www. мне так уже писали пару человек, почему ajax не работает. да потому что видят такие вот "добавь", при этом у пользователя в конфиге HTTP_SERVER без WWW

или HTTP_ADMIN без www - тоже улыбает ...

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

 

В .htaccess добавь:
RewriteCond %{HTTP_HOST} !^www

 

 

Отвечу - все то что вы написали, должен делать пользователь, но квалификация 90% пользователей не позволяет этого сделать, поэтому я просто предложил, чтобы разработчики позаботились о "таких" пользователях

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

если "текущий домен" - _SERVER['SERVER_NAME'], то "камни" начнутся с момента установки движка в поддиректорию.

Ну они и так начинаются когда включается seo url :) и ИМ установлен в поддиректорию

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

домены разные, не вопрос, потому и запросы не проходят и самый правильный вариант решения склейка средствами веб сервера, но я подумал, что можно добавить код в seoPro, который бы генерировал ссылки не опираясь на константу HTTP_SERVER, а исходя из текущего домена. только где-то должны быть подводные камни

Отличная идея, пока камни у себя не обнаружил, всё работает и с www и без, на уровне модуля. А вот на уровне всего ИМ, лучше через SeoPro

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

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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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