2013-12-11 7 views
1

У меня проблема с jQuery ajax методом по https.jQuery ajax over https

Весь сайт обслуживается через https. Большинство форм отправляются на страницу обработки через ajax. URL для функции AJAX в основном:

$.ajax({ 
    "/assets/php/ajax/processor.php", 
    ... 
}); 

У меня также есть файл .htaccess, который перенаправляет все запросы HTTP к HTTPS те, как так:

# Redirect any http requests to https 
RewriteCond %{HTTPS} off 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L] 

Аякса работает отлично, если удалить редирект в файле .htaccess, но, похоже, с ним работать не будет. Я предполагаю, что это связано с тем, что ajax функционирует над http (jQuery-описание .ajax(): выполнить асинхронный запрос HTTP (Ajax)), и поэтому перенаправление .htaccess захватывает запрос ajax.

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

Заранее спасибо за любую помощь

+1

Ajax запрос с использованием относительного URL, как тот, который вы используете, должны идти как запрос HTTPS, если браузер в настоящее время указывает на https-домен. Можете ли вы предоставить какие-либо ошибки, которые отображаются на консоли, когда они «не работают»? –

+0

Это то, что я думал, но RewriteCond, похоже, улавливает запрос ajax, что означает, что запрос не превышает https (RewriteCond% {HTTPS} off) –

ответ

0

Изменить ваше правило, чтобы пропустить переход на HTTPS для AJAX URI:

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} !/assets/php/ajax/processor\.php [NC] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R] 
+0

Если я исключу страницу процессора из https-перенаправления, будут отправлены данные на страницу процессора все еще зашифрованы? –

+0

Данные, относящиеся к '/ assets/php/ajax/processor \ .php', не будут зашифрованы. Извините, не знал, что вы хотите сохранить '/ assets/php/ajax/processor \ .php' всегда на https – anubhava

+0

Можете ли вы указать полный URL-адрес в AJAX, например' https://domain.com/assets/php/ajax/ процессор \ .php'? – anubhava

0

Добавить в Access-Control-Allow-Origin заголовкам вашего сервера:

Access-Control-Allow-Origin: https://yoursite.com

Затем исходный файл .htaccess должен работать, как ожидалось.