如何在htaccess中配置规则允许Office Web Apps Viewer访问受保护文件
问题根因
- 你之前在浏览器中抓包拿到的域名都是Office Web Apps的前端静态资源域名,仅对应用户浏览器加载Office预览页的请求,真正需要访问你站点下docx文件的是微软的后端抓取服务器,这些服务器的域名/IP不会出现在用户浏览器的请求日志中,因此你添加的前端域名白名单无法匹配后端抓取请求。
- 你使用的
Allow from 域名配置依赖Apache的HostnameLookups功能,该功能默认关闭,且多数微软后端抓取服务器的IP反向解析结果不会匹配你填写的前端域名,因此规则不会生效。 - 你提供的iframe代码存在语法错误,嵌套的双引号导致src属性被截断,即使权限配置正确也可能无法正常加载。
修复步骤
1. 修正iframe代码
将iframe中嵌套的文件地址做URL编码,避免双引号冲突:
<iframe src="https://view.officeapps.live.com/op/embed.aspx?src=https%3A%2F%2Fwww.example.com%2Fpath%2Fto%2Ffiles%2Ffile.docx"></iframe>
2. 调整.htaccess配置
根据你使用的Apache版本选择对应配置即可:
情况1:Apache 2.4及以上版本(推荐)
使用新的访问控制语法,通过匹配Office Web Apps专属请求UA放行,无需维护IP白名单:
RewriteEngine On # 匹配Office Web Apps后端抓取请求的UA特征 RewriteCond %{HTTP_USER_AGENT} (Microsoft\ Office\ Web\ Apps|WOPI) [NC] RewriteRule ^.*$ - [E=ALLOW_OFFICE:1] # 访问控制规则 Require all denied # 保留你原有的谷歌爬虫放行规则 Require host google.com # 放行Office Web Apps的请求 Require env ALLOW_OFFICE # 如需放行自身办公IP可额外添加:Require ip 你的公网IP地址
情况2:Apache 2.2版本
适配旧版访问控制语法:
Order Deny,Allow Deny from all # 保留你原有的谷歌爬虫放行规则 Allow from google.com # 匹配Office Web Apps的UA特征放行 SetEnvIf User-Agent "(Microsoft Office Web Apps|WOPI)" allow_office Allow from env=allow_office
验证方法
配置完成后可使用curl命令模拟Office抓取请求验证规则是否生效:
curl -I -A "Microsoft Office Web Apps" https://www.example.com/path/to/files/file.docx
如果返回状态码为200则配置正常,即可正常使用Office Web Apps预览文件。
内容的提问来源于stack exchange,提问作者Kirito
相关产品推荐
相关产品推荐

