example.comとwww.example.comの2つのサーバオブジェクトを定義しました。ユーザーがモバイルブラウザを使用している場合は、モバイルウェブサイトwww.example.com/mに自動的にリダイレクトします。Webおよびモバイルサイトのリダイレクト用にNGINXを設定します
tomcatにデプロイされたモバイル版とWeb版のプロジェクトには2つの異なるプロジェクトがあり、APIはウェブ版のみで公開されています。モバイルプロジェクトは同じWeb APIを使用するため、ルートは一般的です。
構成は次のとおりです。
server {
#listen 80 is default
listen 80;
listen 443 ssl;
ssl on;
ssl_certificate /path/to/certificates/www.example.com.chained.crt;
ssl_certificate_key /path/to/certificates/example.com.key;
location/{
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") {
return 301 https://www.example.com/m;
}
return 301 https://www.example.com;
}
location /m {
}
server_name example.com;
}
server {
listen 80;
listen 443 ssl;
ssl on;
ssl_certificate /path/to/certificates/www.example.com.chained.crt;
ssl_certificate_key /path/to/certificates/example.com.key;
server_name www.example.com;
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
root /usr/share/tomcat/webapps/ExampleApp;
location/{
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}
}
この設定が正しく動作したとき:
- example.comはウェブ からモバイル
- example.comまたはwww.example.comから入力されます
ただし、次の場合は機能しません。
- www.example.comはモバイルから入力します(モバイルサイトの代わりにウェブ版を開きます)。
はどのようにして、ユーザーがモバイルからwww.example.comに入るとき、それはwww.example.com/mにリダイレクトすることができますか?
ありがとうございます@リチャード、提案された実装では、すべてのAPI呼び出しが/ mに書き換えられるため、モバイルクライアントはAPI呼び出しを行うことができません。 www.example.com/loginはwww.example.com/m/loginにリダイレクトされます。 APIは/ mではなく/にあります。どうすればこの問題を解決できますか?私は正規表現の実装を試みたが、それは私のために動作しませんでした。 –
@MohammadAslam書き換えたいURIがわからない。 '/'を '/ m'に書き直す場合は、' rewrite ^/$/m/last; 'を使います。その場合、リダイレクトループがないので、おそらく 'location/m'は必要ありません。 –
変更がうまくいきました –