redirect.global.ts 1.1 KB

123456789101112131415161718192021222324252627
  1. export default defineNuxtRouteMiddleware((to, from) => {
  2. // 仅在根路径 '/' 进行判断,避免循环重定向或其他页面被误伤
  3. if (to.path === '/' || to.path === '/web' || to.path === '/mobile') {
  4. // 获取 User-Agent
  5. // 注意:在 SSR 环境下,我们需要从请求头获取;在客户端导航时,使用 navigator
  6. let userAgent = ''
  7. if (process.server) {
  8. const headers = useRequestHeaders(['user-agent'])
  9. userAgent = headers['user-agent'] || ''
  10. } else {
  11. userAgent = navigator.userAgent
  12. }
  13. // 定义移动端正则匹配
  14. let isMobile = /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone|tablet)/i.test(userAgent)
  15. // if (!isMobile && !process.server && userAgent.includes('Macintosh') && navigator.maxTouchPoints > 1) {
  16. // isMobile = true
  17. // }
  18. // 执行重定向
  19. // 302: 临时重定向 (建议先用 302 测试,稳定后可改为 301)
  20. const target = isMobile ? '/mobile' : '/web'
  21. if (to.path !== target) {
  22. return navigateTo(target, { redirectCode: 302 })
  23. }
  24. }
  25. })