【问题标题】:How do I pass parameters via a domain forward to an Apps Script web app?如何通过域转发将参数传递给 Apps Script Web 应用程序?
【发布时间】:2019-12-17 08:08:22
【问题描述】:

我正在制作一个小型 Web 应用程序,它根据传递的 URL 参数向我发送提醒。目前,我有一个个人域 - 为了便于讨论,我们将其命名为 http://somedomain.com

我在域提供商网站的 DNS 设置中设置了一个子域,以便它重定向到一个 Google Apps 脚本发布的 Web 应用程序,该应用程序旨在向我发送提醒。我的工作流程如下:

  • 我转到http://s.somedomain.com 的子域并使用? 传递参数(例如http://s.somedomain.com?q=medicine
  • s.somedomain.com 设置为重定向到我位于 https://script.google.com/macros/s/.../exec 的 Apps Script Web 应用程序:
function doGet(e){
  
  GmailApp.sendEmail('MYEMAIL', 'Reminder: placeholder text', e.parameter.q);
  return HtmlService.createHtmlOutput("✔️ Sent");
}

工作流程非常好,因为重定向所有工作都有效,我最终进入一个只显示✔️ Sent 的页面。 然而,这里的问题是,当我转到s.somedomain.com?q=medicine 时,我会自动重定向到s.somedomain.com/?q=medicine(在顶级域之后有一个/),这完全破坏了脚本,因为参数被传递到我的根目录在重定向之前,导致重定向指向:

https://script.google.com/macros/s/.../exec/?q=medicine

而不是:

https://script.google.com/macros/s/.../exec?q=medicine

我不确定这是否是我的 DNS 转发的问题,或者我是否需要将我的域指向一个页面并以这种方式处理参数,或者这是否可以通过尝试在 Apps 脚本中完成获取尾部/之后的参数。

我的域名提供商是 ionos(以前的 1and1),我的目标设置如下图所示,Domains & SSL > Subdomains > s.somedomain.com > Adjust Destination > Forward Domain.

【问题讨论】:

  • 设置重定向到https://script.google.com/macros/s/...。致电somedomain.com/exec?q=medicine?
  • @TheMaster 很棒的建议,但不幸的是它不起作用 - 调用 somedomain.com/exec?q=medicine 不会调用脚本,而是重定向到 script.google.com/home。我按照您的建议尝试了域端重定向,在脚本 ID 之后没有尾随 /,然后再次使用。我考虑过使用一些服务器端重定向来处理它,但由于我的网络服务器情况,我希望在 Apps Script 或 DNS 中执行此操作。我想知道 serverfault 是否是个问的好地方。
  • 我还编辑了我的问题,说实话我是在子域而不是域本身上测试它。在s.subdomain.com上运行。
  • somedomain.com/exec?q=medicine doesn't call the script and instead just redirects to script.google.com/home 你能得到网络日志吗(应该在开发控制台中)?比如发出了什么请求以及重定向来自哪里?
  • @TheMaster s.somedomain.com?q=medicine 得到302 Found 重定向到https://script.google.com/macros/s/... 脚本页面,没有/exec?q=medicine,然后是script.google.com/a/macros/myDomain/s/...,最后是https://script.google.com/home。都是302 Found

标签: google-apps-script web-applications parameters http-redirect url-parameters


【解决方案1】:

这不适用于纯重定向,因为 URL 参数不会在重定向 302 上传递。

但是,这可以通过使用 ionos 转发域页面上的“帧重定向”选项来完成。正如 TheMaster 所建议的那样,而不是将帧重定向指向

https://script.google.com/macros/s/.../exec

它现在重定向到:

https://script.google.com/macros/s/...

我已经编辑了我的 code.gs 文件,因为 Apps Script Web 应用程序位于另一个域中,因此不能简单地使用 HtmlService.createHtmlOutput() 进行评估:

function doGet(e){

  GmailApp.sendEmail('MYEMAIL', 'Reminder: placeholder text', e.parameter.q);
  return HtmlService.createTemplateFromFile('urlString').evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}

我现在有一个包含确认页面的urlString.html 文件:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    ✔️ Sent    
  </body>
</html>

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 2020-04-29
    • 2018-03-27
    • 2018-08-05
    • 1970-01-01
    • 2013-09-08
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多