1

Тема: На статичних сторінках не працює #if #else #endif

Доброго дня!

Є сайт, на якому є статичні та динамічні (формуються скриптом) сторінки.
Всі сторінки мають одні й ті ж самі шапку (top) та підвал (bot).
І в top, і в bot є директиви:

<!--#if expr= ...
<!--#else -->
<!--#endif -->

Їх там кілька вкладених одна в одну. Все працювало добре, поки не довелося переїжджати на новий сервер. Тепер на динамічних сторінках все працює, а на статичних береться те, що стоїть після <!--#if expr= ..., тобто директиви не спрацьовують.

Як це виправити?

2

Re: На статичних сторінках не працює #if #else #endif

Схоже, вам треба Server Side Includes для статичних сторінок увімкнути.
Хоча в принципі SSI - теж скрипт, які ж сторінки "статичні", якщо скриптом формуються?

Подякували: Dmy1

3

Re: На статичних сторінках не працює #if #else #endif

SSI підключено та працює, крім цих проблемних директив є купа SSI вставок і всі вони працюють нормально. Самі top та bot вставлені через SSI.

4

Re: На статичних сторінках не працює #if #else #endif

Так, ще раз. Припустимо, є

<!--#if expr= ...>A
<!--#else -->B
<!--#endif -->

Ви кажете, що

Anfisa написав:

на статичних береться те, що стоїть після <!--#if expr= ..., тобто директиви не спрацьовують.

Тобто на сторінку потрапляє AB (і закоментовані теги). Якщо на сторінку потрапляє одне з A чи B, але не те, що ви очікуєте, то це означає, що директиви спрацьовують, але не так, як ви очікували, і проблема в умові, а не в директивах.

Подякували: Anfisa, Dmy2

5

Re: На статичних сторінках не працює #if #else #endif

Відміна в тому, що всі статичні сторінки мають розширення *.html, а динамічні формуються скриптом  та мають розширення *.pl, щось типу такого: .../cgi-bin/search_m.pl?act=rek&sort=popular.

6

Re: На статичних сторінках не працює #if #else #endif

koala написав:

Так, ще раз. Припустимо, є

<!--#if expr= ...>A
<!--#else -->B
<!--#endif -->

Ви кажете, що

Anfisa написав:

на статичних береться те, що стоїть після <!--#if expr= ..., тобто директиви не спрацьовують.

Тобто на сторінку потрапляє AB (і закоментовані теги). Якщо на сторінку потрапляє одне з A чи B, але не те, що ви очікуєте, то це означає, що директиви спрацьовують, але не так, як ви очікували, і проблема в умові, а не в директивах.

Є лише одна умова, А, якщо вона виконується, то має спрацьовувати те, що вказано між <!--#if expr= ...> та <!--#else -->, якщо не виконується, то має спрацювати те, що вказано після <!--#else -->.

На статичних сторінках, не зважаючи на те, виконується умова А чи не виконується, спрацьовує те, що вказано між <!--#if expr= ...> та <!--#else -->

На динамічних все працює правильно.

7

Re: На статичних сторінках не працює #if #else #endif

koala написав:

проблема в умові

Мені ще збільшити?

8

Re: На статичних сторінках не працює #if #else #endif

koala написав:
koala написав:

проблема в умові

Мені ще збільшити?

Так, поясніть, будь ласка.

Як умови можуть на це впливати залежно від того, статична сторінка чи динамічна.

Наприклад, одна з умов, це те, звід юзер дивиться сайт, з мобільного пристрою чи зі стаціонарного, залежно від того підвантажуються різні шапки сайту.

Юзер заходить на головну сторінку (статичну) і бачить одну шапку сайту, потім на тому ж комп'ютері переходить за посиланням на динамічну сторінку і бачить іншу шапку сайту.

9

Re: На статичних сторінках не працює #if #else #endif

Наприклад, якісь змінні оточення можуть не виставлятися, треба налаштування сервера дивитися.
А взагалі ставити питання по коду без коду безглуздо, вам так не здається? Телепатів тут немає. Хочете вільно переказувати код - то я вам вільно перекажу спосіб вирішення, вас це влаштує? Треба розібратися і виправити, ото й усе.

10

Re: На статичних сторінках не працює #if #else #endif

Мені теж здається, що проблема саме в налаштуваннях серверу. Адже на старому сервері все працювало. І тут не спрацьовує лише на *htm, *.html сторінках.

Ось один з кодів, який не спрацьовує:

<!--#if expr="$HTTP_USER_AGENT=/midp/ || $HTTP_USER_AGENT=/samsung/ || $HTTP_USER_AGENT=/nokia/ || $HTTP_USER_AGENT=/j2me/ || $HTTP_USER_AGENT=/avant/ || $HTTP_USER_AGENT=/docomo/ || $HTTP_USER_AGENT=/novarra/ || $HTTP_USER_AGENT=/palmos/ || $HTTP_USER_AGENT=/palmsource/ || $HTTP_USER_AGENT=/opwv/ || $HTTP_USER_AGENT=/chtml/ || $HTTP_USER_AGENT=/pda/ || $HTTP_USER_AGENT=/mmp/ || $HTTP_USER_AGENT=/blackberry/ || $HTTP_USER_AGENT=/mib/ || $HTTP_USER_AGENT=/symbian/ || $HTTP_USER_AGENT=/wireless/ || $HTTP_USER_AGENT=/nokia/ || $HTTP_USER_AGENT=/hand/ || $HTTP_USER_AGENT=/mobi/ || $HTTP_USER_AGENT=/phone/ || $HTTP_USER_AGENT=/cdm/ || $HTTP_USER_AGENT=/upb/ || $HTTP_USER_AGENT=/audio/ || $HTTP_USER_AGENT=/SIE/ || $HTTP_USER_AGENT=/SEC/ || $HTTP_USER_AGENT=/samsung/ || $HTTP_USER_AGENT=/HTC/ || $HTTP_USER_AGENT=/mot-/ || $HTTP_USER_AGENT=/mitsu/ || $HTTP_USER_AGENT=/sagem/ || $HTTP_USER_AGENT=/sony/ || $HTTP_USER_AGENT=/alcatel/ || $HTTP_USER_AGENT=/lg/ || $HTTP_USER_AGENT=/eric/ || $HTTP_USER_AGENT=/vx/ || $HTTP_USER_AGENT=/NEC/ || $HTTP_USER_AGENT=/philips/ || $HTTP_USER_AGENT=/mmm/ || $HTTP_USER_AGENT=/xx/ || $HTTP_USER_AGENT=/panasonic/ || $HTTP_USER_AGENT=/sharp/ || $HTTP_USER_AGENT=/wap/ || $HTTP_USER_AGENT=/sch/ || $HTTP_USER_AGENT=/rover/ || $HTTP_USER_AGENT=/pocket/ || $HTTP_USER_AGENT=/benq/ || $HTTP_USER_AGENT=/java/ || $HTTP_USER_AGENT=/pt/ || $HTTP_USER_AGENT=/pg/ || $HTTP_USER_AGENT=/vox/ || $HTTP_USER_AGENT=/amoi/ || $HTTP_USER_AGENT=/bird/ || $HTTP_USER_AGENT=/compal/ || $HTTP_USER_AGENT=/kg/ || $HTTP_USER_AGENT=/voda/ || $HTTP_USER_AGENT=/sany/ || $HTTP_USER_AGENT=/kdd/ || $HTTP_USER_AGENT=/dbt/ || $HTTP_USER_AGENT=/sendo/ || $HTTP_USER_AGENT=/sgh/ || $HTTP_USER_AGENT=/gradi/ || $HTTP_USER_AGENT=/jb/ || $HTTP_USER_AGENT=/dddi/ || $HTTP_USER_AGENT=/moto/ || $HTTP_USER_AGENT=/iphone/ || $HTTP_USER_AGENT=/android/ ||
$HTTP_USER_AGENT=/Midp/ || $HTTP_USER_AGENT=/Samsung/ || $HTTP_USER_AGENT=/Nokia/ || $HTTP_USER_AGENT=/J2me/ || $HTTP_USER_AGENT=/Avant/ || $HTTP_USER_AGENT=/Docomo/ || $HTTP_USER_AGENT=/Novarra/ || $HTTP_USER_AGENT=/Palmos/ || $HTTP_USER_AGENT=/Palmsource/ || $HTTP_USER_AGENT=/Opwv/ || $HTTP_USER_AGENT=/Chtml/ || $HTTP_USER_AGENT=/Pda/ || $HTTP_USER_AGENT=/Mmp/ || $HTTP_USER_AGENT=/Blackberry/ || $HTTP_USER_AGENT=/Mib/ || $HTTP_USER_AGENT=/Symbian/ || $HTTP_USER_AGENT=/Wireless/ || $HTTP_USER_AGENT=/Nokia/ || $HTTP_USER_AGENT=/Hand/ || $HTTP_USER_AGENT=/Mobi/ || $HTTP_USER_AGENT=/Phone/ || $HTTP_USER_AGENT=/Cdm/ || $HTTP_USER_AGENT=/Upb/ || $HTTP_USER_AGENT=/Audio/ || $HTTP_USER_AGENT=/SIE/ || $HTTP_USER_AGENT=/SEC/ || $HTTP_USER_AGENT=/Samsung/ || $HTTP_USER_AGENT=/HTC/ || $HTTP_USER_AGENT=/Mot-/ || $HTTP_USER_AGENT=/Mitsu/ || $HTTP_USER_AGENT=/Sagem/ || $HTTP_USER_AGENT=/Sony/ || $HTTP_USER_AGENT=/Alcatel/ || $HTTP_USER_AGENT=/Lg/ || $HTTP_USER_AGENT=/Eric/ || $HTTP_USER_AGENT=/Vx/ || $HTTP_USER_AGENT=/NEC/ || $HTTP_USER_AGENT=/Philips/ || $HTTP_USER_AGENT=/Mmm/ || $HTTP_USER_AGENT=/Xx/ || $HTTP_USER_AGENT=/Panasonic/ || $HTTP_USER_AGENT=/Sharp/ || $HTTP_USER_AGENT=/Wap/ || $HTTP_USER_AGENT=/Sch/ || $HTTP_USER_AGENT=/Rover/ || $HTTP_USER_AGENT=/Pocket/ || $HTTP_USER_AGENT=/Benq/ || $HTTP_USER_AGENT=/Java/ || $HTTP_USER_AGENT=/Pt/ || $HTTP_USER_AGENT=/Pg/ || $HTTP_USER_AGENT=/Vox/ || $HTTP_USER_AGENT=/Amoi/ || $HTTP_USER_AGENT=/Bird/ || $HTTP_USER_AGENT=/Compal/ || $HTTP_USER_AGENT=/Kg/ || $HTTP_USER_AGENT=/Voda/ || $HTTP_USER_AGENT=/Sany/ || $HTTP_USER_AGENT=/Kdd/ || $HTTP_USER_AGENT=/Dbt/ || $HTTP_USER_AGENT=/Sendo/ || $HTTP_USER_AGENT=/Sgh/ || $HTTP_USER_AGENT=/Gradi/ || $HTTP_USER_AGENT=/Jb/ || $HTTP_USER_AGENT=/Dddi/ || $HTTP_USER_AGENT=/Moto/ || $HTTP_USER_AGENT=/Iphone/ || $HTTP_USER_AGENT=/Android/ ||
$HTTP_USER_AGENT=/MIDP/ || $HTTP_USER_AGENT=/SAMSUNG/ || $HTTP_USER_AGENT=/NOKIA/ || $HTTP_USER_AGENT=/J2ME/ || $HTTP_USER_AGENT=/AVANT/ || $HTTP_USER_AGENT=/DOCOMO/ || $HTTP_USER_AGENT=/NOVARRA/ || $HTTP_USER_AGENT=/PALMOS/ || $HTTP_USER_AGENT=/PALMSOURCE/ || $HTTP_USER_AGENT=/OPWV/ || $HTTP_USER_AGENT=/CHTML/ || $HTTP_USER_AGENT=/PDA/ || $HTTP_USER_AGENT=/MMP/ || $HTTP_USER_AGENT=/BLACKBERRY/ || $HTTP_USER_AGENT=/MIB/ || $HTTP_USER_AGENT=/SYMBIAN/ || $HTTP_USER_AGENT=/WIRELESS/ || $HTTP_USER_AGENT=/NOKIA/ || $HTTP_USER_AGENT=/HAND/ || $HTTP_USER_AGENT=/MOBI/ || $HTTP_USER_AGENT=/PHONE/ || $HTTP_USER_AGENT=/CDM/ || $HTTP_USER_AGENT=/UPB/ || $HTTP_USER_AGENT=/AUDIO/ || $HTTP_USER_AGENT=/SIE/ || $HTTP_USER_AGENT=/SEC/ || $HTTP_USER_AGENT=/SAMSUNG/ || $HTTP_USER_AGENT=/HTC/ || $HTTP_USER_AGENT=/MOT-/ || $HTTP_USER_AGENT=/MITSU/ || $HTTP_USER_AGENT=/SAGEM/ || $HTTP_USER_AGENT=/SONY/ || $HTTP_USER_AGENT=/ALCATEL/ || $HTTP_USER_AGENT=/LG/ || $HTTP_USER_AGENT=/ERIC/ || $HTTP_USER_AGENT=/VX/ || $HTTP_USER_AGENT=/NEC/ || $HTTP_USER_AGENT=/PHILIPS/ || $HTTP_USER_AGENT=/MMM/ || $HTTP_USER_AGENT=/XX/ || $HTTP_USER_AGENT=/PANASONIC/ || $HTTP_USER_AGENT=/SHARP/ || $HTTP_USER_AGENT=/WAP/ || $HTTP_USER_AGENT=/SCH/ || $HTTP_USER_AGENT=/ROVER/ || $HTTP_USER_AGENT=/POCKET/ || $HTTP_USER_AGENT=/BENQ/ || $HTTP_USER_AGENT=/JAVA/ || $HTTP_USER_AGENT=/PT/ || $HTTP_USER_AGENT=/PG/ || $HTTP_USER_AGENT=/VOX/ || $HTTP_USER_AGENT=/AMOI/ || $HTTP_USER_AGENT=/BIRD/ || $HTTP_USER_AGENT=/COMPAL/ || $HTTP_USER_AGENT=/KG/ || $HTTP_USER_AGENT=/VODA/ || $HTTP_USER_AGENT=/SANY/ || $HTTP_USER_AGENT=/KDD/ || $HTTP_USER_AGENT=/DBT/ || $HTTP_USER_AGENT=/SENDO/ || $HTTP_USER_AGENT=/SGH/ || $HTTP_USER_AGENT=/GRADI/ || $HTTP_USER_AGENT=/JB/ || $HTTP_USER_AGENT=/DDDI/ || $HTTP_USER_AGENT=/MOTO/ || $HTTP_USER_AGENT=/IPHONE/ || $HTTP_USER_AGENT=/ANDROID/" -->
<!--#include virtual="/top_m.shtml"-->
<!--#else -->
<!--#include virtual="/top.shtml"-->
<!--#endif -->

З мобільного пристрою має завантажуватися шапка
<!--#include virtual="/top_m.shtml"-->

зі стаціонарного
<!--#include virtual="/top.shtml"-->

на статичних сторінках на всіх пристроях завантажується мобільна шапка.

на динамічних працює як слід.

11

Re: На статичних сторінках не працює #if #else #endif

Для початку гляньте, що там у змінній:

<!--#echo var="http_user_agent" -->

А який веб-сервер і як саме налаштовані статичні та динамічні сторінки?

12

Re: На статичних сторінках не працює #if #else #endif

В динамічних сторінках умови

<!--#if expr= ...
шапка-мобільна
<!--#else -->
шапка стаціонарна
<!--#endif -->

прописані скриптом perl трохи з іншим синтаксисом, за результатом якого виводиться
<!--#include virtual="/top_m.shtml"--> (шапка мобільна)
або
<!--#include virtual="/top.shtml"--> (шапка стаціонарна)

В статичних сторінках умови прописуються безпосередньо в HTML і в браузері виводиться

[an error occurred while processing this directive] [an error occurred while processing this directive]
шапка-мобільна

Якщо в HTML прописати просто <!--#include virtual="/top.shtml"-->, без умов, то все працює.

Тобто сервер сприймає ці директиви
<!--#if expr= ...
<!--#else -->
<!--#endif -->
як неіснуючі, некоректні чи щось на кшталт того.


На сайті є ще інші умови, наприклад, яки відслідковують, чи стоять у юзера певні кукі, і там те ж саме, замість <!--#if expr= ... виводиться [an error occurred while processing this directive]

Може таке бути, що сервер не сприймає саме цю директиву?

В конфігурації Apache прописані наступні рядки для роботи SSI:

AddType text/html .html .shtml .htm .shtm
AddHandler server-parsed .shtml .html .htm .shtm
AddOutputFilter INCLUDES .shtml .html .htm .shtm
LoadModule include_module modules/mod_include.so

Може там ще щось треба прописати?

13

Re: На статичних сторінках не працює #if #else #endif

А для pl що написано в налаштуваннях сервера?
Ну і тупе питання - а на новому сервері точно Apache, а не nginx?

14

Re: На статичних сторінках не працює #if #else #endif

koala написав:

А для pl що написано в налаштуваннях сервера?
Ну і тупе питання - а на новому сервері точно Apache, а не nginx?

Точно Apache, я ж вносила в конфігурації зміни. За замовчанням SSI не працювало.

Для pl не знаю, я туди ще не лазила. Скрипти perl писала не я. Я не програміст. Й до того ж в perl якраз все працює.

15 Востаннє редагувалося koala (28.04.2022 17:19:14)

Re: На статичних сторінках не працює #if #else #endif

Працює майже напевне не тому, що perl, а тому, що сервер щось не те передає.
Може, там ще є якесь правило на рерайт HTTP_USER_AGENT?