“通过 User-Agent 切换访问地址的三种实用方法”

在实际应用中,经常需要根据用户的浏览器、设备或系统来访问不同的网页。以下是我总结的三种常用方法,供大家参考:

第一种方法:通过 JavaScript

<code><strong>var</strong> ua = window.userAgent || navigator.userAgent; <strong>if</strong> (ua.<strong>toLowerCase</strong>().<strong>indexOf</strong>('android') >= 0) { window.location.href = "https://google.com"; } <strong>else</strong> <strong>if</strong> (ua.<strong>toLowerCase</strong>().<strong>indexOf</strong>("iphone") >= 0) { window.location.href = "https://apple.com"; } <strong>else</strong> <strong>if</strong> (ua.<strong>toLowerCase</strong>().<strong>indexOf</strong>("mac") >= 0) { <em>// 在此处添加相应的处理逻辑</em> }</code>

建议将此段代码放置在 <head> 标签内,以加快执行速度。

第二种方法:通过 Nginx 配置

<code>{ listen 80; listen 443 ssl; ssl_certificate /opt/certs/vip/vip_bundle.crt; ssl_certificate_key /opt/certs/vip/vip.key; server_name www.vip.vip vip.vip; access_log logs/vip_access.log main; error_log logs/vip_error.log; location / { root /opt/wwwroot/app; try_files $uri $uri.html $uri/ =404; index index.html index.htm; } <em># 根据 User-Agent 判断</em> location /geek { <strong>if</strong> ($http_user_agent ~* "Android") { root /opt/wwwroot/app/android; break; } <strong>if</strong> ($http_user_agent ~* "(iPhone|iPad)") { root /opt/wwwroot/app/ios; break; } rewrite ^/(.*) https://geek.vip redirect; } }</code>

第三种方法:通过后台路由

这种情况下,我需要根据不同的设备返回不同的下载链接,比如安卓设备返回 APK 文件,iOS 设备则返回 App Store 的地址。我使用了 Express 框架来实现:

<code>app.<strong>get</strong>('/api/xz', (req, res) => { <strong>let</strong> userAgent = req.headers['user-agent']; <em>// 判断是否是搜索引擎爬虫访问</em> <strong>if</strong> (<strong>isRobot</strong>(userAgent)) { res.<strong>status</strong>(200).<strong>end</strong>(); } <strong>else</strong> { <strong>let</strong> key = req.query.key || 'vip'; <strong>let</strong> json = <strong>JSON</strong>.<strong>parse</strong>(fs.<strong>readFileSync</strong>(path.<strong>join</strong>(__dirname, './redirectList.json'))); <strong>let</strong> switchInfo = json.<strong>find</strong>(item => item.key === key); <strong>if</strong> (!switchInfo) { res.<strong>status</strong>(404).<strong>end</strong>(); <strong>return</strong>; } <strong>let</strong> system = <strong>userSystem</strong>(userAgent); res.<strong>redirect</strong>(switchInfo[system]); } }); <em>// 判断是否是搜索引擎</em> <strong>function</strong> <strong>isRobot</strong>(userAgent) { <strong>let</strong> <strong>RobotList</strong> = 'qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms'; <strong>return</strong> <strong>RobotList</strong>.<strong>split</strong>('|').<strong>some</strong>(keyword => userAgent.<strong>includes</strong>(keyword)); } <em>// 判断用户系统类型</em> <strong>function</strong> <strong>userSystem</strong>(userAgent) { <strong>let</strong> ua = userAgent.<strong>toLowerCase</strong>(); <strong>if</strong> (ua.<strong>includes</strong>('android')) { <strong>return</strong> 'android'; } <strong>else</strong> <strong>if</strong> (ua.<strong>includes</strong>('ios') || ua.<strong>includes</strong>('ipad') || ua.<strong>includes</strong>('mac')) { <strong>return</strong> 'ios'; } <strong>else</strong> { <strong>return</strong> 'other'; } }</code>
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容