В моем приложении GAE PHP app.yaml я пытаюсь это сделать:
application: myapp version: 1 runtime: php api_version: 1 threadsafe: yes handlers: - url: /sitemap.xml static_files: sitemap.xml upload: /sitemap\.xml - url: /MyOneLink script: /myDynamicContent.php?myparam=hardcoded_value_1 - url: /MySecondLink script: /myDynamicContent.php?myparam=hardcoded_value_2
поэтому можно просмотреть http://example.com/MyOneLink и получить результат динамического php (который зависит от жестко заданного значения myparam)
проблема в том, что при просмотре ничего не отображается. Есть идеи ?
Кстати, вы можете понять, почему я также публикую «sitemap.xml»: он будет использоваться для раскрытия всех myLinks
спасибо, диего
Остальные ответы были бы точными для конечного числа значений, жестко закодированных (как показано в вопросе).
Но если вы хотите работать с действительно динамической версией с бесконечными возможностями ценностей, вы можете подумать о следующем ( не работает ):
- url: /MyLinks/(.*)/? script: /myDynamicContent.php?myparam=\1
Вышеуказанное не работает. Вы можете решить проблему, используя простой PHP- хак .
Обновите приложение app.yaml
:
- url: /MyLinks/.* script: /myDynamicContent.php
В myDynamicContent.php
получите значение $_SERVER['REQUEST_URI']
и проанализируйте эту строку, чтобы получить заданное значение для myparam
.
Обновить! Более элегантный метод:
<?php $requestURI = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH); $requestURI = explode("/", $requestURI); $myparam = $requestURI[2]; echo $myparam; ?>
Поскольку
parse_url
всегда получает информацию о пути, мы можем безопасно зависеть от жестко заданных индексов. Массив, созданный/MyLinks/value_1
для строки/MyLinks/value_1
будет содержать пустую строку с индексом 0 ,MyLinks
в 1 ,value_1
в 2 и так далее.
Оригинальный метод clunkier:
<?php $requestURI = explode("/", $_SERVER["REQUEST_URI"]); for ($i = 0; $i < count($requestURI); $i++) { if (strcmp($requestURI[$i], "MyLinks") == 0) { $myparam = $requestURI[$i + 1]; break; } } echo $myparam; ?>
Совет. Вы можете использовать одинарные кавычки вместо двойных кавычек.
Вы не можете передавать параметры в параметре «script:».
Один из способов исправить это – два имеют два сценария «ввода», которые затем включают ваш основной сценарий, например:
<?php $_GET['myparam'] = 'hardcoded_value_1'; require('main_script.php');
Которые вы можете ссылаться в app.yaml
Скорее всего, это самый быстрый способ заставить ваш существующий код работать (хотя есть лучшие способы сделать это).
прочитав официальный документ https://cloud.google.com/appengine/docs/php/config/mod_rewrite, я сделал следующее:
<$php $path = parse_url($_SERVER['PATH_INFO'], PHP_URL_PATH); if ($path == '/path') { } ?>