.htaccess - 我可以在地址栏中保留我的 URL 的同时将用户重定向到 Google Drive PDF 吗?
问题描述
如果我有用户点击指向我网站的链接,例如
mydomain.com/pdf/google_token
有没有办法让我将它们重定向到 Google pdf
drive.google.com/file/d/google_token/view
同时保持
mydomain.com/pdf/google_token
在地址栏中?
现在我正在使用成功重定向到谷歌
RewriteRule ^pdf/([a-zA-Z0-9]+)$ https://drive.google.com/file/d/$1/view
在我的 .htaccess 文件中,但它将 URL 替换为
drive.google.com/file/d/google_token/view
谢谢。
解决方案
您不是在寻找重定向的方法。重定向总是会更改客户端中的 URL,这就是重定向的全部目的。您正在寻找的是代理解决方案,可能与内部重写相结合。这会创建一种映射:在该 google 资源上发布的内容会通过您的 http 主机重新发布。
这将是此类设置的示例:
ProxyPass /google-drive/ https://drive.google.com/
ProxyPassReverse /google-drive/ https://drive.google.com/
RewriteEngine on
RewriteRule ^/?pdf/([a-zA-Z0-9]+)$ /google-drive/file/d/$1/view [END]
另一种方法是仅重新发布该远程资源的一部分:
ProxyPass /google-drive/ https://drive.google.com/file/d/
ProxyPassReverse /google-drive/ https://drive.google.com/file/d/
RewriteEngine on
RewriteRule ^/?pdf/([a-zA-Z0-9]+)$ /google-drive/$1/view [END]
该设置同样适用于 http 服务器主机配置,您可能还可以使用动态配置文件(“.htaccess”样式文件)使其工作。如果您确实需要使用这样的文件,请注意在主机配置中启用它的解释。而且你肯定需要加载 apache 的代理模块。不过,出于各种原因,您应该更喜欢将此类规则放在 http 服务器主机配置中。
如果该设置不可行,例如因为您无权访问代理模块,那么您可以实现一个简单的路由解决方案,该解决方案使用例如 php 的cURL
扩展名在后台获取 PDF,并将有效负载与正确的 http 标头一起转发到向该 PDF 发送请求的客户端。这通常是为保存在本地的资源完成的,但没有理由不能对远程资源也这样做。
一些附加说明:
- 如果您只提供该 google drive 资源的文档,那么您可能不需要该
ProxyPassReverse
指令,而只需要ProxyPass
. - 如果您使用上述设置遇到服务器内部错误(http 状态 500),那么您很可能操作的是非常旧版本的 apache http 服务器。
END
在这种情况下,您会在 http 服务器错误日志文件中找到有关不支持标志的提示。在这种情况下尝试使用该[L]
标志,它可能在这里工作相同,但这取决于您的其余设置。
推荐阅读
- bash - 如何在bash中的数组上循环运行并检查元素是否为空
- jquery - 使用 jQuery/JavaScript 对表格行进行排序
- php - 每次提交表单时连接并显示来自文本字段的用户输入
- android - 无法从 android 推送通知中打开待处理的意图,发送推送通知时没有声音和振动
- java - addCompleteListener() 未解决 - Firebase 云消息传递 (FCM)
- android - 无法在 Android Webview 上缩放和滚动 Google 图表
- scala - 从方法返回泛型类型的实例
- assembly - 程序从十六进制到十进制的汇编语言转换,带有循环评分
- java - 卡夫卡经纪人随机崩溃
- javascript - Apple 会批准 iOS Cordova 应用程序吗?