У меня есть набор правил 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]