Я создаю веб-приложение с использованием SSI, чтобы максимально сократить использование сервера (поскольку это маленький VPS), одна из проблем, которые я face предоставляет мобильным пользователям различное содержимое / стиль. Я использую собственный заголовок detect-mobile.html
. Я включаю его в остальные части страниц.
но я смог использовать его только в директиве
только в запрошенном файле HTML, например, index.html
. Я не могу использовать его во включенных файлах footer.html
или header.html
SSI не распознал его. Вот код, который я использую в detect-mobile.html
.
<!--#if expr="$HTTP_USER_AGENT=/iPhone/" -->
<!--#set var="MOBILEDEVICE" value="Yess" -->
<!--#elif expr="$HTTP_USER_AGENT=/Android/" -->
<!--#set var="MOBILEDEVICE" value="Yess" -->
<!--#elif expr="$HTTP_USER_AGENT=/iPod/" -->
<!--#set var="MOBILEDEVICE" value="Yess" -->
<!--#else -->
<!--#set var="MOBILEDEVICE" value="Noo" -->
<!--#endif -->
Я попытался добавить свой собственный заголовок из nginx
set $ismobile Noo;
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino")
{ set $ismobile Yess ; }
proxy_set_header HTTP_CF_ISMOBILE $ismobile; #
add_header 'HTTP_ISMOBILE' $ismobile;
, но SSI не может его прочитать
Кроме разрешенного SSI переменные [ 1 ], такие как HTTP_USER_AGENT, я хочу передать некую настраиваемую переменную, такую как авторизация, в будущем, возможно ли это в SSI. Поскольку директива страны облачной вспышки работает! как они это делают!
Насколько я знаю, сейчас единственный возможный способ для меня: файл SSI html может читать переменную через пользовательский QUERY_STRING
перенаправление, например
rewrite ^ http: //example.com$uri? M = 1 постоянный;
Хорошо, после долгих поисков я обнаружил, что Nginx не принимает заголовок подчеркивания при прокси-сервере на другой сервер (так как я использую прокси-сервер cloudflare), поэтому я меняю мой заголовок выглядит так
add_header 'ISMOBILE' $ismobile ;
, когда я повторяю его в файле SSI, я получил правильное значение, которое для меня удивительно
<!--#echo var = "ISMOBILE" -->
это полный код, который я использую для обнаружения мобильного устройства с использованием только HTML SSI и сервера nginx (без PHP Javascript и т. д. )
set $itismobile Noo;
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino")
{ set $itismobile Yess ; }
Ссылка на код мобильного UA [[113976 2] 1 ] Изменить: мне вообще не нужно было устанавливать значение заголовка, SSI может напрямую читать специальную переменную nginx.
<!--#echo var = "itismobile" -->
print Noo
на рабочем столе и Yess
на мобильном устройстве
Похоже, вы устанавливаете заголовок, передаваемый прокси, как «HTTP_CF_ISMOBILE». Поскольку доступ к заголовкам HTTP осуществляется в SSI с использованием префикса «HTTP_», вам может потребоваться доступ к нему как к переменной «HTTP_HTTP_CF_ISMOBILE».
proxy_set_header HTTP_CF_ISMOBILE $ ismobile;
В качестве альтернативы вы можете предоставить переменную в своем nginx без префикс HTTP
proxy_set_header CF_ISMOBILE $ismobile;