首页 > 解决方案 > 我可以在地址栏中保留我的 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

谢谢。

标签: .htaccessredirect

解决方案


您不是在寻找重定向的方法。重定向总是会更改客户端中的 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]标志,它可能在这里工作相同,但这取决于您的其余设置。

推荐阅读