GAE app.yaml - 从自定义短 URL 获取脚本和参数?
GAE app.yaml - get script and parameter from custom short URL?
我的主要问题是,这是否可能。
我目前的在线申请是mylongnamedapp.com
我也拥有shortna.me
(例如)。
我想实现一个简短的 url link 功能来保存 SMS 消息中的字符,所以我希望能够让用户像这样单击 link http://shortna.me/a/f423f
现在,shortna.me
将解析为 mylongnamedapp.com
,所以我可以执行以下任一操作:
- 有一个名为
a.php
的脚本,并且有 app.yaml 'decode' http://shortna.me/a/f423f
脚本 a.php
参数为 f423f
?
- 有一个名为
a
的文件夹,其中有 app.yaml 运行 个默认脚本,运行 它带有参数 f423f
?
在 Google App Engine 上使用 app.yaml 是否可以实现上述任何一个?
如果我正确理解了您的问题,您希望 App Engine 应用程序使用参数 some_value
.
将对 /a/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
脚本,并将查询的结尾映射到要使用的参数。
根据@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:
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
material。
第三个是本题的答案
最后一个是将不匹配的请求发送到默认主页的包罗万象。
我的主要问题是,这是否可能。
我目前的在线申请是mylongnamedapp.com
我也拥有shortna.me
(例如)。
我想实现一个简短的 url link 功能来保存 SMS 消息中的字符,所以我希望能够让用户像这样单击 link http://shortna.me/a/f423f
现在,shortna.me
将解析为 mylongnamedapp.com
,所以我可以执行以下任一操作:
- 有一个名为
a.php
的脚本,并且有 app.yaml 'decode'http://shortna.me/a/f423f
脚本a.php
参数为f423f
? - 有一个名为
a
的文件夹,其中有 app.yaml 运行 个默认脚本,运行 它带有参数f423f
?
在 Google App Engine 上使用 app.yaml 是否可以实现上述任何一个?
如果我正确理解了您的问题,您希望 App Engine 应用程序使用参数 some_value
.
/a/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
脚本,并将查询的结尾映射到要使用的参数。
根据@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:
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
material。
第三个是本题的答案
最后一个是将不匹配的请求发送到默认主页的包罗万象。