2013-12-11 88 views
1

我在通過https使用jQuery的ajax方法時遇到問題。通過https的jQuery ajax

整個網站通過https服務。大多數表單都通過ajax提交給處理頁面。對於AJAX功能的URL是基本上是:

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

我也有重定向所有HTTP請求到https的像這樣.htaccess文件:

# 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

使用像你正在使用應該作爲一個HTTPS請求,如果瀏覽器當前指向一個相對URL一個Ajax請求一個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: https://yoursite.com

然後你原來的.htaccess文件應該按預期工作。