Перейти к содержанию
markimax

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

Рекомендуемые сообщения

Все наверно замечали, что если константа 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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, то никакие трюки тут не помогут

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

В .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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.