WSL搭建的局域网web服务器无法加载根目录外mp4/mkv格式视频文件
WSL部署局域网电影共享服务问题解决方案
核心问题原因
- web服务默认禁止访问站点根目录以外的系统文件路径,直接拼接本地磁盘路径到URL无法被web服务解析
file://协议为本地文件协议,仅当前设备可访问,局域网其他设备无法读取你本地的磁盘文件- 你写死了video标签的
type="video/mp4",mkv格式的视频会被浏览器识别为不支持的格式,无法加载播放 - WSL默认挂载的Windows盘权限配置错误,Apache运行用户没有读取权限
分步解决方法
1. 配置Apache目录别名
打开Apache主配置文件/etc/apache2/apache2.conf或者站点配置文件/etc/apache2/sites-available/000-default.conf,添加如下规则:
# 将URL路径/movies映射到本地的/mnt/d/Movies目录 Alias /movies "/mnt/d/Movies" <Directory "/mnt/d/Movies"> Options Indexes FollowSymLinks AllowOverride None # 允许所有访问,如需限制仅局域网可访问,注释下一行,取消下下行注释并替换为你的局域网网段 Require all granted # Require ip 192.168.1.0/24 </Directory>
保存后执行systemctl restart apache2重启Apache服务。
2. 修复WSL挂载盘权限
打开WSL内的/etc/wsl.conf文件,添加如下配置:
[automount] options = "metadata,umask=22,fmask=11" mountFsTab = false
保存后关闭所有WSL窗口,在Windows的命令提示符中执行wsl --shutdown重启WSL,此时Windows盘挂载后的权限允许Apache读取文件。
3. 修改站点配置
将之前的movieDir配置改为:
$lanSite->movieDir = '/movies/';
4. 修复video标签配置
删除source标签上的type="video/mp4"属性,浏览器会自动识别视频格式,无需手动指定,避免mkv格式无法播放的问题。修改后的代码如下:
<video> <source style="height:600px; width:480px;" src="<?= $lanSite->movieDir . DIRECTORY_SEPARATOR . $movieName . "-" . $movieYear . $movieFile; ?>"> </video>
验证配置
在WSL内执行ip a查看eth0网卡的局域网IP,在浏览器访问http://[WSL的局域网IP]/movies/Speed.2.Cruise.Control-1997/Speed.2.Cruise.Control-1997.mkv,可正常播放即配置生效,局域网内其他设备使用该IP也可正常访问。
内容的提问来源于stack exchange,提问作者OpenSourceAdvocate
相关产品推荐
相关产品推荐

