В моем 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
всегда получает информацию о пути, мы можем безопасно зависеть от жестко закодированных индексов. Массив производитсяexplode
для строки/MyLinks/value_1
будет содержать пустую строку в индексе 0,MyLinks
в 1,value_1
в 2, и так далее.
Оригинальный более грубый метод:
<?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') {
}
?>