2013-08-07 32 views
1

我不是.htaccess專家,但是隨着時間的推移,我已經從各種可用的帖子構建了一個。在ajax頁面期間希望ingore .htaccess限制包括

本節

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteRule ^(.*)$ index.php?path=$1 [QSA,L] 

導致所有頁面都要經過index.php文件。這工作正常。但是,它迫使我的至少一個ajax頁面通過index.php,這是不可取的。有誰知道我可以如何限制這個.htaccess代碼只在初始站點訪問期間生效,而不是ajax加載?

謝謝。

回答

2

爲什麼不直接將AJAX請求發送到常規文件(大小)?這樣,%{REQUEST_FILENAME} !-s條件將失敗並且不會使用重寫規則。

否則,你可以試試這個跳過重寫,如果要求有共同的(但不是標準)X-Requested-With HTTP頭

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{HTTP:X-Requested-With} !=XMLHttpRequest 
RewriteRule ^(.*)$ index.php?path=$1 [QSA,L] 

我會打破它,下面爲您...

當發送AJAX請求時,大多數JS庫或瀏覽器(無法準確記得)會注入一個HTTP標頭X-Requested-With,其值爲XMLHttpRequest。您可以在RewriteCond(如%{HTTP:X-Requested-With} =XMLHttpRequest)中使用HTTP標頭來檢測AJAX請求。使用!=表示請求不通過AJAX。

+0

我真的不明白你的這個返回代碼是如何工作的。例如,你使用字符串'ajax',但我不知道爲什麼。你能在那裏具體嗎? 謝謝。 – CompuMatter

+0

@ user2659169我已更新我的回答 – Phil

+0

您的代碼幾乎適用於我!但在某些情況下(從Ionic應用程序調用)它不起作用。我設法用這樣的規則來完成它:RewriteCond%{HTTP:x-requested-with} =^XMLHttpRequest $ –