LoginSignup
2
6

More than 5 years have passed since last update.

SSIを用いたコンテンツ出し分けがApache 2.4でエラーになる

Posted at

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ディレクティブ2onを指定することで古い構文に戻すことができます。

SSILegacyExprParser on

ちなみにデフォルト値はoffです。気軽にバージョンアップすると動かなくなってはまります。互換性を取ってデフォルトはonにしてほしかったですね……

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6