SSIを使うと正規表現マッチで条件分岐ができるので、PC/スマホの出し分け用に以下のような記述が使われることがあります。
<!--#if expr="${HTTP_USER_AGENT} = /(iPhone)|(iPod)|(Android)|(Windows Phone)/" -->
スマホ用の記述
<!--#else -->
PC用の記述
<!--#endif -->
が、これはApache 2.4ではエラーになり動きません。なぜかというとexpr
に指定する条件式の構文が「ap_expr1」という新しい構文に変わっているためです。演算子が増えたり組み込みの関数が呼び出せるようになったりといろいろ変わっているのですが、上記の例だと以下の内容が引っかかります。
- 変数の表記が
$NAME
から%{NAME}
に変わった - 正規表現マッチの演算子が
=~
になった
なので、今後は以下のように記述する必要があります。
<!--#if expr="%{HTTP_USER_AGENT} =~ /(iPhone)|(iPod)|(Android)|(Windows Phone)/" -->
スマホ用の記述
<!--#else -->
PC用の記述
<!--#endif -->
あるいはSSILegacyExprParser
ディレクティブ2にon
を指定することで古い構文に戻すことができます。
SSILegacyExprParser on
ちなみにデフォルト値はoff
です。気軽にバージョンアップすると動かなくなってはまります。互換性を取ってデフォルトはon
にしてほしかったですね……