2013-05-06 3 views
3

можно перенаправить пользователя на основе HTTP-заголовка content-type?Как mod_rewrite на основе http-заголовка content-type

Например:

1)

Применение пытается загрузить localhost/res/123/var/abc и content-type установлен на:

application/json 

Сервер должен просто вернуть JSON-результат для приложения (который реализован).

2)

Если обычный веб-браузер посещает URL localhost/res/123/var/abc, то content-type устанавливается на:

text/html 

В этом случае сервер должен перенаправлять браузер для вывода WebView (например, 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', хотя это не очень мощно. В противном случае вам придется делать это самостоятельно в скрипте. –