如何通过域将参数转发到 Apps 脚本网络应用程序?
How do I pass parameters via a domain forward to an Apps Script web app?
我正在制作一个小型 Web 应用程序,它会根据传递的 URL 参数向我发送提醒。目前,我有一个个人域名 - 为了便于讨论,我们将其称为 http://somedomain.com
.
我在域提供商网站的 DNS 设置中设置了一个子域,以便它重定向到 Google Apps Script 发布的 Web 应用程序,该应用程序旨在向我发送提醒。我的工作流程如下:
- 我转到
http://s.somedomain.com
的子域并使用 ?
传递参数(例如 http://s.somedomain.com?q=medicine
)
s.somedomain.com
设置为重定向到位于 https://script.google.com/macros/s/.../exec
: 的我的 Apps 脚本 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
我不能 100% 确定这是否是我的 DNS 转发问题,或者我是否需要将我的域指向一个页面并以这种方式处理参数,或者这是否可以在 Apps 脚本中完成通过尝试获取尾随 /
.
之后的参数
我的域名提供商是 ionos(以前的 1and1),我的目标设置如下所示,在 Domains & SSL > Subdomains > s.somedomain.com > Adjust Destination > Forward Domain.
下
这不适用于纯重定向,因为 URL 参数不会在重定向 302 上传递。
然而,这可以通过使用 ionos 转发域页面上可用的 'Frame redirect' 选项来完成。正如 TheMaster 所建议的,而不是将框架重定向指向
https://script.google.com/macros/s/.../exec
它现在重定向到:
https://script.google.com/macros/s/...
我已经编辑了我的 code.gs
文件,因为 Apps 脚本网络应用程序位于另一个域中,因此不能简单地使用 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>
我正在制作一个小型 Web 应用程序,它会根据传递的 URL 参数向我发送提醒。目前,我有一个个人域名 - 为了便于讨论,我们将其称为 http://somedomain.com
.
我在域提供商网站的 DNS 设置中设置了一个子域,以便它重定向到 Google Apps Script 发布的 Web 应用程序,该应用程序旨在向我发送提醒。我的工作流程如下:
- 我转到
http://s.somedomain.com
的子域并使用?
传递参数(例如http://s.somedomain.com?q=medicine
) s.somedomain.com
设置为重定向到位于https://script.google.com/macros/s/.../exec
: 的我的 Apps 脚本 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
我不能 100% 确定这是否是我的 DNS 转发问题,或者我是否需要将我的域指向一个页面并以这种方式处理参数,或者这是否可以在 Apps 脚本中完成通过尝试获取尾随 /
.
我的域名提供商是 ionos(以前的 1and1),我的目标设置如下所示,在 Domains & SSL > Subdomains > s.somedomain.com > Adjust Destination > Forward Domain.
这不适用于纯重定向,因为 URL 参数不会在重定向 302 上传递。
然而,这可以通过使用 ionos 转发域页面上可用的 'Frame redirect' 选项来完成。正如 TheMaster 所建议的,而不是将框架重定向指向
https://script.google.com/macros/s/.../exec
它现在重定向到:
https://script.google.com/macros/s/...
我已经编辑了我的 code.gs
文件,因为 Apps 脚本网络应用程序位于另一个域中,因此不能简单地使用 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>