要实现网站在PC电脑上无法打开,而在手机上可以正常访问的功能,通常需要采用服务器端的技术手段,结合客户端(即PC和手机)的识别技术来实现。比较流行的方法是使用用户代理(User-Agent)检测,以下是一些通过代码实现的方法
1. 使用Apache的.htaccess
文件
在Apache服务器上,你可以使用.htaccess
文件结合mod_rewrite
模块来根据User-Agent进行重定向或拒绝服务。但请注意,.htaccess
文件本身不支持直接拒绝服务(如返回403 Forbidden),但可以通过重定向到一个错误页面来实现类似的效果。
首先,确保你的Apache服务器启用了mod_rewrite
模块。
然后,在你的网站根目录下创建一个.htaccess
文件,并添加以下规则:
RewriteEngine On
# 检查是否为PC设备(这里只是一个简单的示例,实际应用中可能需要更复杂的正则表达式)
RewriteCond %{HTTP_USER_AGENT} !(mobile|android|iphone|ipad|blACKberry|windows\s+phone) [NC]
# 如果是PC设备,重定向到错误页面
RewriteRule ^(.*)$ /error.html [L,R=302]
# 确保错误页面不被重定向(如果需要的话)
RewriteRule ^error\.html$ - [L]
注意:上面的RewriteCond
中的正则表达式非常基础,它试图通过检查User-Agent中是否不包含一些常见的移动设备标识来区分设备类型。然而,这种方法可能不够准确,因为User-Agent可以被伪造,且新的设备和浏览器会不断出现。在实际应用中,你可能需要使用更复杂的逻辑或第三方服务来准确识别设备类型。
2. 使用PHP
如果你更倾向于在PHP中处理这个逻辑,你可以在网站的入口文件(如index.php
)中添加以下代码:
<?php
// 检查User-Agent,判断是否为PC设备
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
if (!preg_match('/(mobile|android|iphone|ipad|blackberry|windows\s+phone)/', $userAgent)) {
// 如果是PC设备,重定向到错误页面或显示错误信息
header('Location: /error.html');
exit;
}
// 如果不是PC设备,继续处理请求...
// ...(你的网站代码)
?>
这段代码首先获取了User-Agent字符串,并使用preg_match
函数来检查它是否包含一系列移动设备的关键字。如果User-Agent不包含这些关键字,则认为它是来自PC设备的请求,并使用header
函数重定向到/error.html
页面。请注意,在调用exit
之前进行重定向是很重要的,以确保脚本不会继续执行后续的代码。
注意:与.htaccess
方法类似,这里的正则表达式也只是一个示例,它可能无法准确识别所有类型的设备。在实际应用中,你可能需要调整或替换为正则表达式库,或使用第三方服务来增强设备检测的准确性。
3. 使用Web.config文件
如果的WEB环境是使用IIS的,你可以在网站的根目录下创建一个Web.config
文件,并添加相应的重写规则。
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="BlockPCAccess" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_USER_AGENT}" pattern="(Windows NT|Macintosh|X11)" />
<!-- 这里可能需要更复杂的正则表达式来准确匹配PC设备的User-Agent -->
</conditions>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Access is forbidden." />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
注意:上面的正则表达式(Windows NT|Macintosh|X11)
只是一个示例,它可能无法准确匹配所有PC设备的User-Agent。你需要根据实际需要调整这个正则表达式。
4.使用Nginx的rewrite
模块
使用Nginx的rewrite
模块来根据User-Agent
重写URL或返回特定的HTTP状态码。
server {
listen 80;
server_name yourdomain.com;
if ($http_user_agent ~* "(Windows NT|Macintosh|X11)") {
return 403; # 或者重定向到一个特定的错误页面
}
location / {
# 正常的请求处理...
root /path/to/your/webroot;
index index.html index.htm;
}
}
注意:上面的正则表达式(Windows NT|Macintosh|X11)
只是一个示例,它可能无法准确匹配所有PC设备的User-Agent。你需要根据实际需要调整这个正则表达式。