Использование переменных среды Apache для установки пользовательского ErrorDocument

У меня есть набор правил RewriteCond, которые тестируют различные мобильные устройства, а затем устанавливают переменные среды, такие как "env=device:.iphone" или "env=device:.smartphone", если пользовательский идентификатор совпадает с устройством iPhone или Android.

Сейчас я пытаюсь перенаправить пользователя на пользовательские страницы ошибок сервера 404/500 для каждого устройства с помощью страниц ошибок.

В идеале я хотел бы иметь возможность проверить наличие переменной там, а затем записать в пользовательскую строку ErrorDocument. Но Apache, похоже, не работает в этом случае.

Любые идеи, как я могу построить, если / еще тесты в файле Apache Conf для среды VAR?

2 ответа

Начиная с версии 2.3 Apache, вы можете использовать IF-структуры. Это описано в документации Apache.

ErrorDocument не допускает ничего условного, но выполняет внутреннее перенаправление.

Вы должны быть в состоянии сделать это с помощью mod_rewrite:

ErrorDocument 404 /normal_404.html

RewriteEngine on
RewriteCond %{ENV:device:.iphone} 1
RewriteRule ^/normal_404.html$ /iphone_404.html [L]

В других ответах говорится, что вы должны иметь возможность использовать условие в Apache 2.3, но не приводите пример и не объясняйте синтаксис. Вот как вы можете проверить переменную среды, а затем установить на ее основе собственный документ об ошибке в .htaccess:

<If "reqenv('device') == 'iphone'">
     ErrorDocument 404 /error_pages/404.iphone.html
</If>
Другие вопросы по тегам