GAE app.yaml - 从自定义短网址获取脚本和参数?

时间:2018-01-23 05:51:45

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

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

我当前的实时应用是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
  2. 参数编写f423f脚本
  3. 有一个名为a的文件夹,并让app.yaml在其中运行默认脚本并使用参数f423f运行它?
  4. 在Google App Engine上使用app.yaml可以实现上述任何一项吗?

2 个答案:

答案 0 :(得分:0)

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

这里有一个小工作示例,您将能够适应您的案例场景:

<强> 的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>

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

答案 1 :(得分:0)

有了@dsesto的回答,我将这一步骤更进一步,并且不再需要将该脚本放在/a目录中。因此,我可以使用http://shortna.me/a/f423f而不是http://shortna.me/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之类的特定页面。

第二个特定于注册,因为该网址很漂亮,并且在营销材料中未使用.php

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

最后一个是将所有不匹配的请求发送到默认主页的功能。