我们的用户正在尝试嵌入我们网站的链接http://www.newsfixed.com/在 Word 文档中,它们会失败。Word for Mac 似乎对服务器配置非常敏感,有时会无法加载某些链接。同样的问题似乎也发生在http://www.facebook.com/和http://www.pinterest.com/(但链接到谷歌、推特、Instagram 等都可以)
重现步骤:
- 创建新的 Word for Mac 文档
在文档中输入以下 URL,然后让 Word 将它们转换为超链接:
http://www.google.com/ http://www.facebook.com/ http://www.theguardian.com/ http://www.nytimes.com/ http://www.pinterest.com/ http://www.instagram.com/ http://www.twitter.com/
点击链接——你会发现 Google、卫报、纽约时报、Instagram 和 Twitter 可以工作,但 Facebook 和 Pinterest(以及我的网站 www.newsfixed.com)则不行。Word 报告错误,“无法打开http://www.pinterest.com/。无法定位 Internet 服务器或代理服务器。“:
这可能与https://stackoverflow.com/questions/17926225/microsoft-office-hyperlink-issues但我不知道该怎么做!
从 pinterest.com 的 HTTP 响应来看,这似乎与提供 302 临时重定向到 HTTPS 版本有关,而不是 301 - 这是我的网站和 pinterest 的共同点。所以我更改了服务器配置,现在返回 301,但似乎没有任何区别。
我使用的是旧版本的 Word for Mac —— 12.3.6。我收到报告说,这种情况也会发生在较新版本的 Word 上(但没有版本号,抱歉)。显然,这种情况是上周才开始发生的,这可能与 SSL 握手和 Heartbleed 补丁有关吗?(我当然在本周重新生成了我的证书)
该服务器是 Ubuntu 上的标准 Apache 2.4,通过 mod_wsgi 运行 Django 应用程序。
谢谢你的帮助,
布伦丹。
答案1
好吧,我设法让它工作了......
似乎 Word 不喜欢我的 SSL 证书(来自 RapidSSL/GeoTrust),即使它通过了 SSL 检查器网站的所有检查(迪吉特 sslshopper和更多)。
因此我意识到我必须在我的 Apache HTTPD 配置中捕获 Word 用户代理:
RewriteEngine On
# catch MS Office clients and send them to an HTTP redirect page
BrowserMatchNoCase (word|excel|powerpoint|ms-office) browser=ms-office
RewriteCond %{ENV:browser} ms-office
RewriteRule ^/(?!ms\-office) http://%{HTTP_HOST}/ms-office?url=%{REQUEST_URI} [R=301,L]
# everyone else can go to the HTTPS site
RewriteCond %{HTTPS} off
RewriteCond %{ENV:browser} !ms-office
RewriteRule ^(?!ms\-office) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
ScriptAlias /ms-office /<path>/bin/msoffice-redirect.sh
其中“msoffice-redirect.sh”是一个简单的 Bash CGI 脚本(!),对安全页面执行元刷新:
#!/bin/bash
URL=${QUERY_STRING//url=/}
echo "Content-type: text/html"
echo
echo "<html><head><meta http-equiv='refresh' content='0;url=https://www.newsfixed.com${URL}'/></head><body></body></html>"
因此流程如下:
- Word 向 http:// URL 发出请求
- Apache 检测用户代理,如果是 Office,则重定向到脚本
- 由于该页面在 Office 看来很正常,因此 Word 打开一个浏览器,指向不安全服务器上的脚本输出,这是一个包含元刷新标记的简单 HTML 页面
- 刷新会将用户切换到 HTTPS 版本,但由于浏览器中正在进行 SSL 握手,因此这不是问题
是的,这完全是黑客行为。我觉得很卑鄙。但它确实有效。不过,Word 文档中的所有链接都必须是 http://,https:// 链接无效,但至少我们现在可以在 Word 文档中包含一些链接。
我受到启发“修复 Microsoft 链接” Ruby 应用程序它在 Ruby 服务器中完成同样的事情。
我希望这能帮助某些人避免我这个周末所经历的痛苦!