GAE app.yaml - получить скрипт и параметр из пользовательского короткого URL?
Мой главный вопрос: возможно ли это?
Мое текущее приложение mylongnamedapp.com
У меня тоже есть shortna.me
(например).
Я хочу реализовать функцию коротких ссылок для сохранения символов в SMS-сообщениях, чтобы пользователи могли нажимать на такую ссылку http://shortna.me/a/f423f
Сейчас, shortna.me
решил бы mylongnamedapp.com
поэтому я мог сделать любое из следующего:
- Есть сценарий под названием
a.php
и иметь app.yaml 'декодировать'http://shortna.me/a/f423f
чтобы сценарийa.php
с параметромf423f
? - Есть папка под названием
a
и app.yaml должен запустить скрипт по умолчанию и запустить его с параметромf423f
?
Возможно ли что-либо из перечисленного выше с app.yaml в Google App Engine?
2 ответа
Если я правильно понял ваш вопрос, вы хотите, чтобы приложение 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
и сопоставление конца запроса с параметром, с которым нужно работать.
Получив ответ от @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
("регистрация" - 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
в маркетинговом материале.
Третий ответ на этот вопрос.
И последний - универсальный способ отправки несоответствующих запросов на домашнюю страницу по умолчанию.