Nginxを使用して、さまざまなユーザーエージェントにさまざまな静的ファイルをどのように提供しますか?たとえば、現在のユーザーがiPhoneを使用している場合は、サービスを提供する必要がありますmobile_index.html
、他のすべてのユーザーエージェントはbrowser_index.html
。
見つかった解決策:
server {
listen 80;
root /var/www;
set $mobile_request '0';
if ($http_user_agent ~ 'iPhone') {
set $mobile_request '1';
}
location =/ {
if ($mobile_request = '1') {
rewrite ^ /mobile_index.html;
}
if ($mobile_request = '0') {
rewrite ^ /browser_index.html;
}
}
}
十分に新しいバージョンのnginx(0.9.6+)がある場合は、 map でこれを実現できます。
map $http_user_agent $myindex {
default /browser_index.html;
~iPhone /mobile_index.html;
}
server {
listen 80;
root /var/www;
location = / { rewrite ^ $myindex; }
}
内部リダイレクトが必要ない場合(インデックス用の静的ファイルを提供しているだけの場合はおそらく必要ありません)、書き換えに「break」フラグを追加して、内部リダイレクトを回避できます。
編集:古いバージョンを使用している場合は、次のようなことができます:
server {
listen 80;
root /var/www;
location = / {
set $myindex /browser_index.html;
if ($http_user_agent ~ iPhone) {
set $myindex /mobile_index.html;
}
rewrite ^ $myindex;
}
}
繰り返しますが、内部リダイレクトが必要ない場合は、ブレークフラグを使用します。