Wake-on-LAN脚本能正常工作,但执行后浏览器跳转到404页面

前端开发 2026-07-10

我在Apache上搭建了一个HTML页面,其中包含一个从PHP调用的Python脚本,用来对我的域内设备执行Wake-on-LAN(网络唤醒)。

脚本工作正常,设备按设计启动,但在点击Wake-on-LAN按钮后,HTML页面会跳转到404错误页。有没有办法避免?

html片段:

 <tr>
     <td><button><a href="scripts/wol.php"><img src="images/action_start.jpg" alt="Computer 2" style="width:50px;"></a></button>


 </tr>

PHP代码:

<?php
system ("python /var/www/html/scripts/python/wake.py8 [Variable1] [Variable2]");
header ("Location:index.html");
?>

Python:

#!/usr/bin/python3

import socket
import sys
import codecs

if len(sys.argv) < 3:
    print ("Usage: wake.py <BROADCAST Address> <MAC Address>")   
    sys.exit(1)

mac = sys.argv[2]
data = ''.join(['FF' * 6, mac.replace(':', '') * 16])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
decode_hex = codecs.getdecoder("hex_codec")
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(decode_hex(data)[0], (sys.argv[1], 9))

解决方案

问题不是Wake-On-LAN,而是相对URL的问题。

我假设你在主文件夹中有 index.html

当你在 <a href="scripts/wol.php"> 中点击相对URL时,它会跳转到子文件夹 scripts,随后 "Location:index.html" 中的相对URL正在寻找 scripts/index.html,而不是主文件夹中的 index.html

你可能需要在相对路径中使用 ../ 来返回到上一级目录

header("Location:../index.html")

或者你应该使用以 / 开头的绝对路径

header("Location:/index.html")

顺便说一句:如果你创建了 scripts/index.html(例如带有消息 I'm in subfolder "scripts"),在当前的 "Location:index.html" 下你应该看到这条消息。


通常在所有URL(包括指向脚本、图片、其他页面的链接)中使用绝对路径会更好。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章