Wake-on-Lan脚本可正常唤醒设备,点击按钮后浏览器跳404如何解决?
解决点击唤醒按钮后跳转404的问题
核心问题在于PHP脚本的跳转路径错误,同时HTML按钮与a标签的嵌套写法存在行为冲突风险。以下是两种可行解决方案:
方案一:修正跳转路径(快速解决)
1. 修复PHP的跳转逻辑
你的PHP文件位于scripts/目录下,原代码里的header("Location:index.html")会尝试访问scripts/index.html,但主页实际在网站根目录。修改为绝对路径或正确的相对路径:
<?php // 执行Python脚本(注意确认wake.py8文件名是否正确,避免笔误) system("python /var/www/html/scripts/python/wake.py8 [Variable1] [Variable2]"); // 跳转到根目录的index.html header("Location: /index.html"); exit; // 确保后续代码不执行,避免跳转失效 ?>
或者使用相对路径:
header("Location: ../index.html");
2. 规范HTML按钮写法
避免button嵌套a标签的不规范写法,改为a标签包裹button:
<tr> <td> <a href="scripts/wol.php"> <button><img src="images/action_start.jpg" alt="Computer 2" style="width:50px;"></button> </a> </td> </tr>
方案二:AJAX异步请求(推荐,无页面跳转)
这种方式点击按钮后不会刷新或跳转页面,后台静默执行唤醒逻辑,体验更流畅。
1. 修改HTML代码
替换原按钮为带点击事件的按钮,并添加JS异步请求逻辑:
<tr> <td> <button onclick="wakeDevice()"><img src="images/action_start.jpg" alt="Computer 2" style="width:50px;"></button> </td> </tr> <script> function wakeDevice() { fetch('scripts/wol.php') .then(res => { if (res.ok) { alert('唤醒指令已发送'); } else { alert('指令发送失败,请检查'); } }) .catch(err => { console.error('请求错误:', err); alert('请求出错'); }); } </script>
2. 简化PHP代码
不需要跳转逻辑,直接执行脚本并返回状态:
<?php system("python /var/www/html/scripts/python/wake.py8 [Variable1] [Variable2]"); echo "success"; ?>
额外检查点
- 确认
scripts/wol.php文件路径正确,Apache用户(通常是www-data)有读取和执行权限。 - 验证Python脚本文件名是否为
wake.py8,如果是笔误(比如应为wake.py)需及时修正。 - 检查Apache的
.htaccess文件或rewrite规则,是否干扰了页面跳转路径。
内容的提问来源于stack exchange,提问作者Pixelworks
相关产品推荐
相关产品推荐

