2013-05-06 23 views
3

是否可以重定向用戶,基於http-header content-type如何基於http-header內容的mod_rewrite類型

例如:

1)

一個應用程序試圖加載localhost/res/123/var/abccontent-type設置爲:

application/json 

服務器應該只是返回JSON-結果返回到應用(這是實施)。

2)

如果一個正常的網頁瀏覽器訪問URL localhost/res/123/var/abc,該content-type設置爲:

text/html 

在這種情況下,服務器應該將瀏覽器重定向到輸出網頁視圖(如index_web.html)。

我可以在不使用PHP的情況下實現類似這樣的事情嗎?

回答

7

就我所知,內容類型並未在請求時設置。因此,您需要檢查瀏覽器是否發送了一個Accept標題,該標題向服務器描述它將接受(並顯示)哪些類型的數據而不下載它。大多數瀏覽器都這樣做。他們下面的標題字符串發送到服務器(這是從Chrome中獲得):

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

因此,你需要使用一個條件來檢查Accept頭:

RewriteCond %{HTTP:Accept} text/html [NC] 
# Then, add your RewriteRules here ... 

這將檢查如果text/html包含在Accept標頭中。

+1

問題在於,經常(並且非常正確)「Accept」頭將包含所需的內容類型,但具有不同的「q」權重。您的測試不會檢查測試的相對權重,也不會處理通配符。你可以用'mod_negotiation'來做你想做的事,儘管它不是很強大。否則,你不得不用腳本自己做。 – 2015-07-30 19:06:24