【问题标题】:GAE app.yaml - get script and parameter from custom short URL?GAE app.yaml - 从自定义短 URL 获取脚本和参数?
【发布时间】:2018-01-23 05:51:45
【问题描述】:

我的主要问题是,这是否可能。

我目前的在线申请是mylongnamedapp.com

我还拥有shortna.me(例如)。

我想实现一个短网址链接功能来保存短信中的字符,所以我希望能够让用户点击这样的链接http://shortna.me/a/f423f

现在,shortna.me 将解析为 mylongnamedapp.com,所以我可以执行以下任何操作:

  1. 有一个名为a.php 的脚本,并让app.yaml '解码'http://shortna.me/a/f423f 到脚本a.php,参数为f423f
  2. 有一个名为a的文件夹并让app.yaml在其中运行一个默认脚本并使用参数f423f运行它?

Google App Engine 上的 app.yaml 是否可以实现上述任何一项?

【问题讨论】:

  • 请注意,app.yaml 文件不会根据域名做出路由决策,它仅使用文件路径,因此在您的示例中,路由决策将仅基于 /a/f423f。因此http://shortna.me/a/f423fhttp://mylongnamedapp.com/a/f423f 都会产生相同的结果,除非您专门解析脚本中的 URL 域并做出不同的反应。这可能根本不是问题,由您决定。当然,如果您还将shortna.me 映射到您的应用程序(以避免重定向)。
  • 是的,这很酷。问题的原因是简短,因为如果长度不是问题,我会选择http://mylongnamedapp.com/thescript.php?id=f423f,所以如果我可以用 app.yaml 做http://mylongnamedapp.com/a/f423f,我可以解决剩下的问题。

标签: php google-app-engine app.yaml


【解决方案1】:

如果我正确理解了您的问题,您希望 App Engine 应用程序将请求路由到 /a/some_value 到带有参数 some_value 的脚本 a.php

这里有一个小的工作示例,您可以根据自己的情况进行调整:

app.yaml

runtime: php55
api_version: 1

handlers:
- url: /a/.*
  script: a.php

a.php

<html>
  <body>
    <?php
    $str = $_SERVER[PATH_INFO];
    $str2 = explode("/",$str)[2]; 

    echo "This function is using the parameter: " . $str2;
    ?>
  </body>
</html>

然后你可以用命令执行这段代码:

dev_appserver.py app.yaml --php_executable_path <PATH_TO_PHP-CGI>

您将看到应用程序正在根据app.yaml 中的处理程序执行a.php 脚​​本,并将查询的结尾映射到要使用的参数。

【讨论】:

    【解决方案2】:

    在@dsesto 的回答下,我更进一步,不再需要将脚本放在/a 目录中。所以我可以使用http://shortna.me/f423f,而不是http://shortna.me/a/f423f

    我的新方向将看到我使用 6 个字符的字母数字代码。因为 app.yaml 使用了正则表达式,所以我是这样做的:

    - url: /[a-zA-Z\d]{6}
      script: a.php
      secure: always
    

    因此,任何与正则表达式 [a-zA-Z\d]{6} 匹配的内容都将发送到 a.php。但我确实有一个mylongnamedapp.com/signup 的处理程序('signup' 是 6 个字符)——只要该处理程序高于这个正则表达式,它就可以工作。所以完整的结果如下所示:

    - url: /(.+\.php)$
      script: \1
      secure: always
    
    - url: /signup
      script: signup.php
      secure: always
    
    - url: /[a-zA-Z\d]{6}
      script: test.php
      secure: always
    
    - url: /.*
      script: home.php
      secure: always
    

    第一个处理程序负责处理特定页面,例如 login.php

    第二个是专门用于注册的,因为 URL 很漂亮,并且没有在营销材料中使用 .php

    第三个是这个问题的答案。

    最后一个是把不匹配的请求发送到默认主页的包罗万象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 2013-11-16
      • 2013-10-07
      • 2015-05-15
      • 2016-10-07
      • 2013-09-15
      • 2021-01-14
      相关资源
      最近更新 更多