Почему не работает javascript, если к домену приписать «www.», и как выйти из положения?

Дорогие друзья, у меня на сайте (на opencart) есть скрипт jquery, выполняющий ajax запрос (кнопка "Заказать").

Так вот, она работает на домене без "www" и стабильно не работает c "www".
Что делать?
  • Вопрос задан
  • 3752 просмотра
Решения вопроса 1
nowm
@nowm
Если вы посмотрите содержимое страницы, которая открывается с www, то в теге «BASE» будет прописан адрес без www. Это такая особенность опенкарта. В кнопке «заказать» адрес выглядит как «index.php?route=бла-бла-бла». Так как у этого адреса нет в начале знака «/», браузер возьмёт для построения полного адреса значение из BASE. Тогда получается, что на странице «http://www.site.ru» ссылка для кнопки «заказать» выглядит как «http://site.ru/index.php?route=бла-бла-бла». И это уже кросс-доменный запрос, который в вашем случае не работает.

Как решение, все страницы должны открываться по одному домену. Нужно сделать перенаправление с www-адресов на адреса без www с помощью .htaccess.

RewriteCond %{HTTP_HOST} ^www.site.ru
RewriteRule (.*) http://site.ru/$1 [R=301,L]


Это будет более простое решение, чем исправлять адреса в движке Opencart, так как я находил там около 90 адресов, которые в таком случае придётся править. Вы, допустим, правкой адреса поправите работу кнопки «заказать», но от этого не начнут работать кнопки «добавить в желаемое», «добавить в сравнение» и т.п. Там куча таких моментов. Так что, настройка перенаправления в .htaccess позволит решить сразу все эти проблемы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
HDApache
@HDApache
PHP программист
Потому что domain.com и www.domain.com с точки зрения брузера - разные домены, а в браузерах кросс доменный ajax запрещен

В скрипте (где AJAX) не пишите полный адрес типа:
domain.com/my_path/my_script
а пишите:
/my_path/my_script

браузер в зависимости от контекста сам подставит или www.domain.com или domain.com
Ответ написан
RubaXa
@RubaXa
CORS
Ответ написан
Комментировать
Nedbow
@Nedbow
С WWW и без него - это 2 разных домена, используйте jsonp
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы