Назад | Перейти на главную страницу

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

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

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

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

Есть идеи, как я могу построить тесты if / else в файле конфигурации apache для переменных среды?

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

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

<If "reqenv('device') == 'iphone'">
     ErrorDocument 404 /error_pages/404.iphone.html
</If>

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

Вы можете сделать это с помощью mod_rewrite:

ErrorDocument 404 /normal_404.html

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