找回密码
 立即注册
查看: 532|回复: 0

[后端] 移动端和pc端分离,如何排除pc某些页面在移动端访问不需要做重定向?

[复制链接]

224

主题

0

回帖

773

积分

高级会员

积分
773
发表于 2024-6-25 11:31:05 | 显示全部楼层 |阅读模式
本帖最后由 御坂主机 于 2024-7-3 18:20 编辑

1. 引言

在移动互联网时代,用户通过各种设备访问网站,包括PC和移动设备。为了提供更好的用户体验,通常会对PC端和移动端进行分离,即针对不同设备提供不同的页面或布局。然而,有时候我们希望某些PC页面在移动端访问时不进行重定向。这篇文章将详细介绍如何实现这一目标。

1.1 移动端和PC端分离的必要性

随着移动设备的普及,用户体验变得至关重要。移动端页面通常需要进行优化,以适应小屏幕和触摸操作。通过分离移动端和PC端,可以分别针对不同设备优化页面,提高用户体验。

1.2 问题描述

在实现PC端和移动端分离时,通常会设置重定向规则,使移动设备访问PC页面时自动跳转到对应的移动页面。但在某些情况下,我们希望某些特定的PC页面在移动端访问时不进行重定向。例如,某些管理后台页面或特殊功能页面。

2. 实现方法

为了实现这一目标,我们需要在前端和后端进行一些设置。

2.1 前端实现方法

在前端,我们可以通过javaScript检测用户的设备,并根据设备类型决定是否进行重定向。

(1) 检测设备类型

可以使用navigator.userAgent来检测用户的设备类型。以下是一个简单的示例:

  1. var userAgent = navigator.userAgent.toLowerCase();
  2. var isMobile = /iphone|ipod|android|blackberry|mini|windows\sce|palm/i.test(userAgent);
复制代码


(2) 设置重定向规则

根据检测到的设备类型,决定是否进行重定向。以下是一个示例代码:

  1. if (isMobile) {
  2.     var currentUrl = window.location.href;
  3.     var nonRedirectPages = ['/special-page1', '/special-page2'];
  4.     var shouldRedirect = true;
  5.    
  6.     for (var i = 0; i < nonRedirectPages.length; i++) {
  7.         if (currentUrl.indexOf(nonRedirectPages<i>) !== -1) {
  8.             shouldRedirect = false;
  9.             break;
  10.         }
  11.     }
  12.    
  13.     if (shouldRedirect) {
  14.         window.location.href = 'https://m.yoursite.com' + window.location.pathname;
  15.     }
  16. }</i>
复制代码


2.2 后端实现方法

在后端,我们可以通过服务器配置或代码逻辑实现对特定页面的重定向控制。

(1) 使用服务器配置

可以通过Apache或Nginx等服务器配置文件,设置重定向规则。例如,在Nginx中,可以通过以下配置实现:

  1. if ($http_user_agent ~* "iphone|ipod|android|blackberry|mini|windows\sce|palm") {
  2.     set $mobile_rewrite 1;
  3. }

  4. if ($request_uri ~* "/special-page1|/special-page2") {
  5.     set $mobile_rewrite 0;
  6. }

  7. if ($mobile_rewrite) {
  8.     rewrite ^ <a href="https://m.yoursite.com" target="_blank">https://m.yoursite.com</a>$request_uri permanent;
  9. }
复制代码


(2) 使用后端代码

在后端代码中,可以根据用户代理信息和请求的URL,决定是否进行重定向。以下是一个php示例代码:

  1. $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
  2. $isMobile = preg_match('/iphone|ipod|android|blackberry|mini|windows\sce|palm/i', $userAgent);
  3. $currentUrl = $_SERVER['REQUEST_URI'];
  4. $nonRedirectPages = array('/special-page1', '/special-page2');
  5. $shouldRedirect = true;

  6. foreach ($nonRedirectPages as $page) {
  7.     if (strpos($currentUrl, $page) !== false) {
  8.         $shouldRedirect = false;
  9.         break;
  10.     }
  11. }

  12. if ($isMobile && $shouldRedirect) {
  13.     header('Location: <a href="https://m.yoursite.com" target="_blank">https://m.yoursite.com</a>' . $currentUrl);
  14.     exit;
  15. }
复制代码


3. 实例演示

以下是一个完整的示例,展示了如何在前端和后端结合实现特定PC页面在移动端访问时不进行重定向。

前端代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>页面重定向示例</title>
  6.     <script>
  7.         window.onload = function() {
  8.             var userAgent = navigator.userAgent.toLowerCase();
  9.             var isMobile = /iphone|ipod|android|blackberry|mini|windows\sce|palm/i.test(userAgent);
  10.             if (isMobile) {
  11.                 var currentUrl = window.location.href;
  12.                 var nonRedirectPages = ['/special-page1', '/special-page2'];
  13.                 var shouldRedirect = true;
  14.                
  15.                 for (var i = 0; i < nonRedirectPages.length; i++) {
  16.                     if (currentUrl.indexOf(nonRedirectPages<i>) !== -1) {
  17.                         shouldRedirect = false;
  18.                         break;
  19.                     }
  20.                 }
  21.                
  22.                 if (shouldRedirect) {
  23.                     window.location.href = 'https://m.yoursite.com' + window.location.pathname;
  24.                 }
  25.             }
  26.         };
  27.     </script>
  28. </head>
  29. <body>
  30.     <h1>欢迎访问我们的页面</h1>
  31. </body>
  32. </html></i>
复制代码


后端代码(PHP示例):

  1. <?php
  2. $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
  3. $isMobile = preg_match('/iphone|ipod|android|blackberry|mini|windows\sce|palm/i', $userAgent);
  4. $currentUrl = $_SERVER['REQUEST_URI'];
  5. $nonRedirectPages = array('/special-page1', '/special-page2');
  6. $shouldRedirect = true;

  7. foreach ($nonRedirectPages as $page) {
  8.     if (strpos($currentUrl, $page) !== false) {
  9.         $shouldRedirect = false;
  10.         break;
  11.     }
  12. }

  13. if ($isMobile && $shouldRedirect) {
  14.     header('Location: <a href="https://m.yoursite.com" target="_blank">https://m.yoursite.com</a>' . $currentUrl);
  15.     exit;
  16. }
  17. ?>
复制代码

4. 结论

通过在前端和后端结合设置重定向规则,可以实现特定PC页面在移动端访问时不进行重定向。这样不仅可以提升用户体验,还可以灵活地控制不同设备上的页面访问行为。希望这篇文章能为您在实现PC端和移动端分离时提供有价值的参考。







------------------------------------------------------------------------------------------------------------------------------------------

========  御 坂 主 机  ========

>> VPS主机 服务器 前沿资讯 行业发布 技术杂谈 <<

>> 推广/合作/找我玩  TG号 : @Misaka_Offical <<

-------------------------------------------------------------------------------------------------------------------------------------------


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-4 13:34 , Processed in 0.077585 second(s), 24 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表