我有一组 RewriteCond 规则,用于测试各种移动设备,然后如果用户代理与 iPhone 或 Android 设备匹配,则设置环境变量,如“env=device:.iphone”或“env=device:.smartphone”。
我现在正尝试通过错误页面将用户重定向到针对每个设备的自定义样式的 404/500 服务器错误页面。
理想情况下,我希望能够测试是否存在变量,然后写入自定义 ErrorDocument 字符串。但在这种情况下,Apache 似乎不起作用。
关于如何在 apache conf 文件中为环境变量构建 if/else 测试,有什么想法吗?
答案1
从 Apache 2.3 版开始,您可以使用 IF 结构。它Apache 文档中描述。
答案2
ErrorDocument
不允许任何条件,但它确实进行内部重定向。
您应该能够使用 mod_rewrite 来实现这一点:
ErrorDocument 404 /normal_404.html
RewriteEngine on
RewriteCond %{ENV:device:.iphone} 1
RewriteRule ^/normal_404.html$ /iphone_404.html [L]
答案3
其他答案说你应该能够使用 Apache 2.3<如果>条件,但不要给出示例或解释语法。以下是检查环境变量然后根据它设置自定义错误文档的方法.htaccess:
<If "reqenv('device') == 'iphone'">
ErrorDocument 404 /error_pages/404.iphone.html
</If>