news 2026/10/2 13:23:51

XAMPP多站点配置:让自定义目录与htdocs共存

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
XAMPP多站点配置:让自定义目录与htdocs共存

1. 为什么改个站点目录,htdocs突然就打不开了?——一个被忽略的Apache配置逻辑陷阱

刚装好XAMPP,想把公司项目放在D:\projects\myapp,顺手在httpd-vhosts.conf里加了一条虚拟主机:

<VirtualHost *:80> DocumentRoot "D:/projects/myapp" ServerName myapp.local </VirtualHost>

保存,重启Apache,浏览器一敲http://localhost—— 403 Forbidden。再试http://myapp.local,倒是能打开。但htdocs目录彻底失联了。不是权限问题,不是路径错,连http://localhost/phpmyadmin都进不去。很多人第一反应是“是不是我改坏了vhosts文件”,于是删掉刚加的那段,重启,好了。但问题没解决:你只是退回了原点,而不是真正理解了Apache的请求路由机制。

这根本不是XAMPP的bug,而是Apache本身的设计哲学:它没有“默认站点”这个概念,只有“匹配到的第一个有效虚拟主机”。当你在httpd-vhosts.conf里只定义了一个*:80的<VirtualHost>,Apache就会把所有发往本机80端口的HTTP请求(无论Host头是什么)都交给它处理。localhost、127.0.0.1、甚至你电脑名DESKTOP-ABC,只要没被其他更精确的虚拟主机捕获,全归这个*:80管。而你的DocumentRoot指向的是D:/projects/myapp,它当然找不到htdocs下的index.php或phpmyadmin子目录。

关键词XAMPP、htdocs、Apache、httpd-conf、httpd-vhosts.conf全部指向同一个核心矛盾:如何让自定义站点和XAMPP自带的htdocs共存,且互不干扰。这不是简单的“多加一行配置”就能搞定的,它牵扯到Apache的主配置文件加载顺序、虚拟主机匹配优先级、以及<VirtualHost>与<Directory>指令的嵌套关系。网上大量教程只告诉你“加个vhost就行”,却没人解释为什么加完之后localhost就挂了——因为它们默认你已经理解了Apache的底层路由模型。而现实是,绝大多数XAMPP用户,包括很多写了多年PHP的开发者,对这个模型是模糊的。我第一次遇到这个问题时,花了整整一个下午翻Apache官方文档的VirtualHost章节,才搞懂_default_:80这个特殊标识符的真正含义。它不是语法糖,而是Apache为解决“兜底站点”问题专门设计的锚点。

所以,这篇文章不叫“XAMPP多站点配置教程”,而叫“XAMPP设置其他站点目录不影响对htdocs目录的访问”。标题里的“不影响”二字,就是全文的唯一目标。你要的不是一堆能跑起来的配置片段,而是确保你在添加任何新站点后,http://localhost这个最原始、最常用的入口,依然像出厂设置一样稳定可靠。这背后需要的,是一套经过验证的、可复用的配置范式,而不是零散的技巧拼凑。

2. Apache的“请求匹配流水线”:从接收到分发的四步真相

要让htdocs和自定义目录和平共处,你必须先看清Apache是怎么处理每一个HTTP请求的。这不是玄学,而是一条清晰、可追溯的流水线。我把这个过程拆解成四个不可跳过的步骤,每一步都对应着一个关键配置文件或指令块。

2.1 第一步:监听端口与协议绑定(httpd.conf)

Apache启动时,首先读取xampp\apache\conf\httpd.conf。在这里,它通过Listen指令确定自己要守在哪几个“大门”前。XAMPP默认是:

Listen 80 Listen 443

这意味着Apache会同时监听本机的80端口(HTTP)和443端口(HTTPS)。当你的浏览器发出http://localhost请求时,数据包首先抵达的就是这个80端口。此时,Apache还完全不知道你要访问的是哪个网站,它只知道:“有个HTTP请求来了,目标是本机80端口”。

提示:Listen指令的位置非常关键。它必须出现在所有<VirtualHost>定义之前,否则Apache会报错。XAMPP的httpd.conf文件里,Listen通常位于文件顶部,紧跟着ServerRoot和ServerName之后。如果你把它挪到了httpd-vhosts.conf的末尾,重启服务时Apache会直接拒绝启动,并在错误日志里写明Listen not allowed here。

2.2 第二步:主服务器根目录设定(httpd.conf)

在httpd.conf中,紧接着Listen的,是DocumentRoot指令:

DocumentRoot "C:/xampp/htdocs" <Directory "C:/xampp/htdocs"> # 一堆权限和安全设置... </Directory>

这是整个Apache服务的“默认老家”。如果后续没有任何虚拟主机匹配成功,所有请求最终都会落到这个目录下。你可以把它理解为一个“保底方案”。但请注意,这个DocumentRoot只在“没有匹配到任何<VirtualHost>”的情况下才生效。一旦你启用了虚拟主机(即httpd-vhosts.conf被包含并解析),Apache就会进入第三步,而忽略这一步的DocumentRoot。

2.3 第三步:虚拟主机匹配(httpd-vhosts.conf)

这是冲突的核心发生地。Apache会按顺序扫描httpd-vhosts.conf文件中定义的所有<VirtualHost>块。匹配规则遵循“最长匹配优先”原则,具体来说:

  • IP地址匹配 > 域名匹配:<VirtualHost 127.0.0.1:80>比<VirtualHost *:80>更精确。
  • 域名精确匹配 > 通配符匹配:<VirtualHost localhost:80>比<VirtualHost *:80>更精确。
  • _default_是最高优先级的通配符:<VirtualHost _default_:80>是Apache内置的“终极兜底”,它比*:80更靠前。

XAMPP的httpd-vhosts.conf默认是空的,或者只有一段被注释掉的示例。当你加入自己的<VirtualHost *:80>后,它就成了文件里唯一的、也是最宽泛的匹配项。于是,所有Host: localhost、Host: myapp.local、Host: 127.0.0.1的请求,全部被它捕获。而它的DocumentRoot指向你的D:/projects/myapp,自然就找不到htdocs下的内容了。

2.4 第四步:目录权限与访问控制(<Directory>指令)

即使请求被正确路由到了某个DocumentRoot,最后一步还要过Directory这关。比如,你的myapp目录可能有.htaccess文件,或者httpd-vhosts.conf里为该虚拟主机单独定义了<Directory>块:

<VirtualHost *:80> DocumentRoot "D:/projects/myapp" ServerName myapp.local <Directory "D:/projects/myapp"> Require all granted AllowOverride All </Directory> </VirtualHost>

这个<Directory>块决定了Apache是否允许用户访问该目录下的文件,以及是否启用.htaccess覆盖。如果这里写错了,比如Require local而你用的是127.0.0.1,或者AllowOverride None导致重写规则失效,那么即使路由对了,页面也会显示403或500错误。而htdocs目录的<Directory>权限,是在httpd.conf里定义的,它和httpd-vhosts.conf里的任何<Directory>是并列关系,互不影响。这就是为什么你删掉自定义vhost后,htdocs就能立刻恢复——因为Apache又回到了第二步的“主服务器模式”。

这四步流水线,构成了Apache处理请求的完整闭环。任何一个环节出错,都会导致你看到的“htdocs打不开”现象。而绝大多数人的排查,只停留在第三步(vhost配置),却忽略了第一步(端口监听是否正常)、第二步(主DocumentRoot是否被意外覆盖)和第四步(目录权限是否被新vhost的<Directory>块污染)。接下来,我会带你用一套经过千锤百炼的配置组合拳,一次性堵死所有漏洞。

3. “双轨制”配置法:一份配置,两套世界,互不侵扰

明白了Apache的四步流水线,解决方案就呼之欲出了:我们必须显式地、明确地,为localhost和127.0.0.1创建一个专属的、高优先级的虚拟主机,让它永远排在你自定义站点的前面。这就是所谓的“双轨制”——一条轨道跑你的项目,另一条轨道稳稳托住XAMPP的原生功能。

3.1 核心配置:_default_:80是你的定海神针

打开xampp\apache\conf\extra\httpd-vhosts.conf。清空所有内容,或者在文件开头,插入以下这段配置:

# === XAMPP 原生功能守护者:localhost 和 127.0.0.1 的专属轨道 === <VirtualHost _default_:80> DocumentRoot "C:/xampp/htdocs" ServerName localhost ServerAlias 127.0.0.1 <Directory "C:/xampp/htdocs"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> # 确保 phpMyAdmin、FileZilla 等XAMPP控制面板功能可用 Alias /phpmyadmin "C:/xampp/phpMyAdmin" <Directory "C:/xampp/phpMyAdmin"> Options Indexes FollowSymLinks MultiViews AllowOverride all Require all granted </Directory> Alias /webalizer "C:/xampp/webalizer" <Directory "C:/xampp/webalizer"> Options Indexes FollowSymLinks MultiViews AllowOverride all Require all granted </Directory> </VirtualHost>

这段配置的关键,在于<VirtualHost _default_:80>。_default_是Apache的一个特殊关键字,它代表“所有未被其他虚拟主机明确匹配的请求”。但它有一个极其重要的特性:在匹配顺序上,_default_的优先级高于*。也就是说,即使你后面定义了<VirtualHost *:80>,只要请求的Host头是localhost或127.0.0.1,Apache也会优先尝试匹配_default_这个块。而我们在这个块里,把DocumentRoot明确设为了C:/xampp/htdocs,这就完美复刻了XAMPP的出厂设置。

注意:ServerName和ServerAlias在_default_块里是可选的,但强烈建议加上。它能让Apache在生成错误页面或日志时,更准确地识别出这个虚拟主机的身份。ServerAlias 127.0.0.1尤其重要,因为很多开发工具(如VS Code Live Server插件)默认用IP地址访问,而不是域名。

3.2 自定义站点:用精确域名,避开所有歧义

在_default_:80块之后,你就可以放心地添加你的项目了。但这里有个致命细节:绝对不要用<VirtualHost *:80>。你应该使用一个精确的、你能在本地解析的域名:

# === 你的项目:myapp.local === <VirtualHost myapp.local:80> DocumentRoot "D:/projects/myapp" ServerName myapp.local <Directory "D:/projects/myapp"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> </VirtualHost> # === 你的另一个项目:blog.dev === <VirtualHost blog.dev:80> DocumentRoot "D:/projects/blog" ServerName blog.dev <Directory "D:/projects/blog"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> </VirtualHost>

为什么必须用myapp.local:80而不是*:80?原因在于匹配优先级。myapp.local:80是一个精确的、基于域名的匹配,它的优先级远高于_default_:80。当浏览器发出http://myapp.local请求时,Host头是myapp.local,Apache会瞬间匹配到这个块,根本不会去考虑_default_。而当发出http://localhost请求时,Host头是localhost,它不匹配myapp.local,于是继续往下找,就找到了_default_:80,完美路由到htdocs。

3.3 本地DNS映射:让myapp.local真正指向你的电脑

光有Apache配置还不够,你的操作系统必须知道myapp.local这个域名应该解析到哪台机器。Windows系统下,编辑C:\Windows\System32\drivers\etc\hosts文件(需要管理员权限),在文件末尾添加:

127.0.0.1 myapp.local 127.0.0.1 blog.dev

Linux/macOS用户则编辑/etc/hosts。保存后,打开命令行,执行ping myapp.local,如果返回Reply from 127.0.0.1,说明映射成功。这是整个方案里最常被忽略的一步。很多人配置完Apache,发现http://myapp.local打不开,第一反应是Apache错了,其实是hosts文件没改,或者改了没保存(记事本默认会以ANSI编码保存,而hosts文件需要UTF-8无BOM,用Notepad++或VS Code打开编辑最稳妥)。

3.4 验证与测试:四步走,一个都不能少

配置完成后,不要急着重启。按以下顺序逐一验证:

  1. 检查语法:打开XAMPP控制面板,点击Apache行右侧的Config按钮,选择Apache (httpd.conf),然后点击Save。这会触发Apache的配置语法检查。如果配置有误,它会弹出一个红色错误框,告诉你哪一行、哪个文件出错了。这是最快速的排错方式。

  2. 重启服务:在XAMPP控制面板中,停止Apache,再启动它。观察状态栏是否变成绿色的Running。如果启动失败,查看xampp\apache\logs\error.log,里面会有详细的错误信息。

  3. 本地解析测试:在浏览器地址栏分别输入:

    • http://localhost→ 应该看到XAMPP欢迎页或你htdocs下的首页。
    • http://127.0.0.1→ 应该和localhost完全一致。
    • http://myapp.local→ 应该看到你D:/projects/myapp目录下的内容。
    • http://phpmyadmin→ 应该能正常打开phpMyAdmin界面(注意,这里没有localhost/前缀,因为我们用Alias定义了根路径下的别名)。
  4. 跨域与HTTPS兼容性:如果你的项目前端代码里有AJAX请求,确保请求的URL是http://myapp.local/api/xxx,而不是http://localhost/api/xxx。否则会触发浏览器的跨域限制。对于HTTPS,XAMPP默认的443端口配置是独立的,你需要在httpd-ssl.conf里为每个域名单独配置SSL证书,但这超出了本文范围。记住,_default_:443同样适用,原理完全一致。

这套“双轨制”配置法,是我过去五年在十几个不同客户现场部署XAMPP时,反复验证、打磨出来的最稳健方案。它不依赖任何第三方插件,不修改XAMPP的核心文件,所有改动都集中在httpd-vhosts.conf和hosts两个地方,备份和回滚成本极低。更重要的是,它让你彻底摆脱了“改一个,坏一个”的魔咒,可以像管理生产环境一样,自由地增删本地开发站点。

4. 实战避坑指南:那些让你抓狂三天的“小问题”

理论再完美,也架不住实操中的各种奇奇怪怪。下面这些坑,都是我在真实项目中踩过、记录过、并最终找到根因的。它们看起来微不足道,但足以让你在一个下午内怀疑人生。

4.1 坑一:路径中的反斜杠\是Apache的“隐形杀手”

Windows路径习惯用反斜杠,比如D:\projects\myapp。但Apache的配置文件是用C语言解析的,反斜杠在C语言里是转义字符。所以,当你在httpd-vhosts.conf里写:

DocumentRoot "D:\projects\myapp" # ❌ 错误!

Apache实际读到的,可能是D:rojectsmyapp(\p和\m被当成了转义序列)。正确的写法,必须是正斜杠/或双反斜杠\\:

DocumentRoot "D:/projects/myapp" # ✅ 推荐,简洁清晰 # 或者 DocumentRoot "D:\\projects\\myapp" # ✅ 也可以,但略显冗长

这个坑之所以难发现,是因为Apache不会报语法错误,它会静默地解析一个错误的路径,然后在error.log里留下一句模糊的DocumentRoot must be a directory。你顺着日志去查,发现D:/projects/myapp确实存在,于是陷入死循环。我第一次遇到时,是用文本编辑器的“显示所有字符”功能,才看到\p被高亮显示为一个特殊符号,才恍然大悟。

4.2 坑二:XAMPP控制面板的“假重启”陷阱

XAMPP控制面板上的Start按钮,有时会给你一种“服务已启动”的错觉,但实际上Apache进程可能卡在了某个状态。最典型的症状是:你修改了配置,点了Stop,状态变成Stopped,再点Start,状态立刻变回Running,但浏览器访问毫无反应。

这是因为XAMPP的Start按钮,本质上是发送一个net start命令给Windows服务管理器。如果上一次的Apache进程没有被彻底杀死(比如它在处理一个慢查询时被强制终止),新的进程就无法绑定到80端口,会启动失败,但控制面板可能没有及时刷新状态。

终极解决方案:永远用命令行来管理。以管理员身份打开CMD或PowerShell,执行:

# 查看所有占用80端口的进程 netstat -ano | findstr :80 # 根据PID(最后一列数字)强制结束它 taskkill /PID 12345 /F # 然后手动启动Apache C:\xampp\apache\bin\httpd.exe

如果httpd.exe启动后窗口一闪而逝,说明配置有严重错误,它会立即退出。这时,去看xampp\apache\logs\error.log,第一行就是最精准的错误描述。这个方法比依赖图形化控制面板可靠一百倍。

4.3 坑三:.htaccess文件的“继承污染”

假设你的myapp项目里有一个.htaccess文件,里面写了RewriteEngine On和一些重写规则。这本身没问题。但如果你的htdocs目录下,也恰好有一个.htaccess文件(比如你之前为了测试WordPress而放进去的),那么,当localhost被路由到htdocs时,Apache会去读取那个.htaccess文件。如果里面的规则有误(比如一个无限重定向的RewriteRule),那么http://localhost就会陷入301重定向循环,浏览器显示“重定向次数过多”。

根治方法:在_default_:80的<Directory>块里,显式禁用.htaccess的覆盖能力:

<VirtualHost _default_:80> DocumentRoot "C:/xampp/htdocs" # ... 其他配置 <Directory "C:/xampp/htdocs"> # ... 其他权限 AllowOverride None # ✅ 关键!禁止.htaccess生效 </Directory> </VirtualHost>

AllowOverride None意味着Apache将完全忽略htdocs目录下的所有.htaccess文件,只认httpd.conf和httpd-vhosts.conf里的硬编码配置。这样,你的myapp项目可以自由使用.htaccess,而htdocs则保持纯净、稳定。这是一个典型的“隔离设计”,在多项目共存的环境中,是保障基础服务稳定的基石。

4.4 坑四:中文路径与编码的无声崩溃

如果你的项目路径里含有中文,比如D:\我的项目\myapp,那么在httpd-vhosts.conf里写:

DocumentRoot "D:/我的项目/myapp" # ❌ 危险!

Apache(尤其是旧版本)可能会因为编码问题,无法正确解析这个路径,导致启动失败或403错误。虽然现代XAMPP(8.x)对此支持较好,但为了100%的兼容性,我建议永远使用纯英文路径。这不是妥协,而是工程实践中的“最小意外原则”。你可以创建一个D:\dev\myapp的软链接,指向你的中文路径:

# 在管理员CMD中执行 mklink /D D:\dev\myapp "D:\我的项目\myapp"

然后在配置里使用D:/dev/myapp。这样,Apache面对的是标准ASCII路径,而你的源文件依然在中文目录里,两全其美。

这些坑,每一个都曾让我在深夜对着屏幕发呆。但正是这些看似琐碎的细节,构成了一个稳定、可靠的本地开发环境的全部基石。记住,一个优秀的开发者,不在于他能写出多么炫酷的功能,而在于他能否构建出一个让自己和团队都能“心无旁骛”投入开发的底层环境。而XAMPP的多站点配置,就是这个环境的第一块砖。

5. 进阶技巧:让XAMPP成为你的私人Web服务器工厂

当你已经熟练掌握了“双轨制”配置,就可以开始玩点更高级的花样了。这些技巧不是必需的,但它们能极大提升你的开发效率和项目的专业度。

5.1 技巧一:一键切换“开发/演示”模式

你可能有这样的需求:在开发时,myapp.local指向D:/projects/myapp/src(源码目录);但在给客户做演示时,你想让它指向D:/projects/myapp/dist(编译后的静态文件目录)。手动改配置太麻烦。

解决方案:利用Apache的Define指令和IfDefine条件块。在httpd.conf的末尾(在Include语句之后),添加:

# 定义一个全局变量,值为 "dev" Define ENV dev # 如果你想切到演示模式,就把上面这行改成:Define ENV demo

然后,在httpd-vhosts.conf里,用条件块包裹你的虚拟主机:

<IfDefine dev> <VirtualHost myapp.local:80> DocumentRoot "D:/projects/myapp/src" # ... 其他配置 </VirtualHost> </IfDefine> <IfDefine demo> <VirtualHost myapp.local:80> DocumentRoot "D:/projects/myapp/dist" # ... 其他配置,可能还需要不同的Directory权限 </VirtualHost> </IfDefine>

现在,你只需要修改httpd.conf里的一行Define ENV,然后重启Apache,整个站点的根目录就切换了。这比改十次DocumentRoot快得多,也更不容易出错。我把它封装成一个批处理脚本,双击就能切换,团队里每个人都用它。

5.2 技巧二:为每个项目分配独立的PHP版本

XAMPP默认只带一个PHP版本。但你的老项目可能要求PHP 7.4,而新项目要用PHP 8.2。XAMPP本身不支持多PHP,但我们可以用“外部PHP-FPM”的方式绕过去。

首先,下载并安装多个PHP版本(例如php-7.4.33-Win32-vc15-x64和php-8.2.12-Win32-vs16-x64),解压到C:\php74和C:\php82。然后,为每个PHP版本创建一个php-fpm.ini配置文件,并启动对应的php-cgi.exe进程。

接着,在httpd-vhosts.conf里,为不同项目指定不同的PHP处理器:

# PHP 7.4 项目 <VirtualHost oldsite.local:80> DocumentRoot "D:/projects/oldsite" # ... Directory配置 <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> </VirtualHost> # PHP 8.2 项目 <VirtualHost newapp.local:80> DocumentRoot "D:/projects/newapp" # ... Directory配置 <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9001" </FilesMatch> </VirtualHost>

这里,9000和9001是两个PHP-FPM进程监听的端口。Apache通过mod_proxy_fcgi模块,将PHP请求代理给对应版本的PHP-CGI进程。这需要你手动管理PHP进程的启停,但它给了你无与伦比的灵活性。我目前的主力开发环境,就是用这种方式同时运行着PHP 7.4、8.0、8.1和8.2四个版本,每个项目各取所需。

5.3 技巧三:用mod_rewrite实现“伪子域名”开发

有时候,你不想为每个模块都去改hosts文件。比如,你有一个大型CMS,它有前台www.example.com和后台admin.example.com。你希望在本地用example.com和admin.example.com来开发,但又不想每次加一个新模块就去hosts里加一行。

解决方案:利用mod_rewrite的RewriteCond和RewriteRule,结合ServerAlias,实现“单域名多入口”。

在_default_:80的<VirtualHost>块里,添加:

# 在 _default_:80 块内部 RewriteEngine On # 如果Host头是 admin.example.com,则将请求重写到 htdocs/admin 目录 RewriteCond %{HTTP_HOST} ^admin\.example\.com$ [NC] RewriteRule ^(.*)$ /admin/$1 [L] # 如果Host头是 api.example.com,则重写到 htdocs/api 目录 RewriteCond %{HTTP_HOST} ^api\.example\.com$ [NC] RewriteRule ^(.*)$ /api/$1 [L]

然后,在hosts文件里,只需加一行:

127.0.0.1 example.com admin.example.com api.example.com

这样,http://example.com访问htdocs根目录,http://admin.example.com访问htdocs/admin,http://api.example.com访问htdocs/api。所有请求都由同一个_default_:80虚拟主机处理,只是内部路径被动态重写了。这是一种轻量级的、无需额外vhost的多环境模拟方案,特别适合快速原型开发。

这些进阶技巧,不是为了炫技,而是为了让你的XAMPP环境,从一个简单的“本地PHP服务器”,进化成一个真正意义上的、可定制、可扩展、可复用的“个人Web服务器工厂”。它不再是一个被动的工具,而是你开发工作流中,一个主动的、智能的、值得信赖的伙伴。而这一切的起点,就是那行看似简单的<VirtualHost _default_:80>。

我在实际使用中发现,最强大的配置,往往是最简洁的。_default_:80这五个字符,就像一把万能钥匙,它不改变XAMPP的任何原有逻辑,只是在Apache的匹配流水线上,为你精准地钉下了一个“此处必经”的路标。从此,你添加的每一个新站点,都成了这条主干道上的分支,而主干道本身,永远畅通无阻。这大概就是工程之美——用最克制的手段,解决最复杂的问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 13:23:26

MATLAB核密度估计避坑指南:带宽选择与可视化陷阱

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 13:23:26

电位器、可调电阻、可调电容与圣邦微选型:采购避坑实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 13:21:59

MAX13487 RS-485回环失败的六大硬件时序根源与实操修复

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 13:20:59

基于Simscape Multibody的二阶倒立摆建模与LQR控制实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 13:20:59

RS485通讯驱动器实战:艾思控多站点组网与调试要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 13:20:45

等保2.0接口加解密:RSA+AES混合加密与签名验签实现

2. 等保2.0接口加解密方案的整体设计思路2.1 为什么要用"RSAAES"混合加密&#xff0c;而不是只用一种很多刚接触接口安全的朋友会有一个直觉&#xff1a;既然要做加密&#xff0c;那直接上RSA不就行了&#xff1f;前端拿公钥加密&#xff0c;后端拿私钥解密&#xff…

作者头像 李华