lighttpd だけで多言語サイトを作る方法
lighttpd 1.4.21 以上では $HTTP["language"]
という新しい変数(?)が設定の中で使えるようになり、これを使用するとクライアントの Accept-Language
に応じて lighttpd の設定を変えることが可能になります。
これを利用して多言語化しているサイトとしては opensource.kayac.com が有名です。
このサイトは以下のような設定で動作しております。
$HTTP["url"] !~ "^/(?:(?:css|js|img|images?|static|tmp)/|[^/]+\.[^/]+$)" {
$HTTP["url"] !~ "^/(en|ja)(?:$|/)" {
$HTTP["language"] =~ "(en|ja)" {
url.redirect = ( "^/(.*)" => "/%1/$1" )
}
$HTTP["language"] !~ "(en|ja)" {
url.redirect = ( "^/(.*)" => "/en/$1" )
}
}
}
ちょっとややこしいですが、
$HTTP["url"] !~ "^/(?:(?:css|js|img|images?|static|tmp)/|[^/]+\.[^/]+$)" {
で、cssやjsディレクトリ、もしくはルート直下のファイルへのアクセスはそのまま。
$HTTP["url"] !~ "^/(en|ja)(?:$|/)" {
で、すでに /ja/
や /en/
へのリクエストであればそのまま。
上記に該当しなかった場合、
$HTTP["language"] =~ "(en|ja)" {
url.redirect = ( "^/(.*)" => "/%1/$1" )
}
で、Accept-Context
が en か ja の場合はそれに応じてリダイレクト先を振り分ける。それ以外の時(対応していない言語の場合)は
$HTTP["language"] !~ "(en|ja)" {
url.redirect = ( "^/(.*)" => "/en/$1" )
}
で、デフォルトの言語(ここではen)にリダイレクトする。
というような感じで動作しております。
このような使い方以外にもさまざまな使い方ができそうですね。覚えておくともしかしたら使えるかもしれません。