Я пытаюсь переместить существующее приложение на GoogleAppEngine PHP / Flex в GoogleAppEngine PHP / Standard, чтобы воспользоваться функциями стандартного движка.
Мой проект настроен следующим образом:
- server / public_html / rest / index.php: Slim Framework, front_controller_file
- server / src: код приложения php
- server / public_html / index.html: приложение angularjs (+ другое
файлы в этом каталоге.
В GAE PHP Flex мой app.yaml был следующим:
api_version: 1
runtime: php
env: flex
skip_files:
- ^db$
- ^vendor$
- ^Spotfire$
- ^complete-sync\.sh$
- ^phinx\.yml$
- ^phinx-template\.yml$
- ^selective-sync\.sh$
runtime_config:
document_root: /app/public_html
front_controller_file: /app/public_html/rest/index.php
enable_stackdriver_integration: true
...
И так, что Slim Framework работает
файл nginx-app.conf находился в /server/nginx-app.yaml
location / {
# try to serve file directly, fallback to front controller
try_files $uri /index.html$is_args$args;
}
location /rest {
# try to serve file directly, fallback to front controller
try_files $uri /rest/index.php$is_args$args;
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
}
Теперь в GAE PHP Standard мой app.yaml для бэкэнда выглядит так:
runtime: php72
entrypoint: serve public_html/rest/index.php
runtime_config:
document_root: public_html
enable_stackdriver_integration: true
и мой dispatch.yaml выглядит следующим образом:
dispatch:
# Send all rest traffic to the backend
- url: "*/rest/*"
service: default
# Send the rest to the front (angularjs)
- url: "*/*"
service: front
и nginx-app.conf остается прежним.
Когда я достигаю URL (example.com) приложения, приложение angularjs загружается правильно, я вижу экран входа в систему.
если я пойду в
example.com/rest/index.php
Я получаю ошибку аутентификации, которая является ожидаемым поведением.
Однако, если я пойду на
example.com / отдых / аутентификации
Я получаю 404, и я все равно должен получить ошибку приложения вместо 404.
С помощью правила перезаписи nginx он должен преобразовать URL-адрес в следующее:
example.com / отдых / index.php? Аутентификации
Кроме того, в моем коде я проверяю путь, чтобы исключить какой-либо путь проверки подлинности, для некоторой общедоступной страницы (и аутентификации)
Когда я нажимал кнопку входа в систему, в моем гибком развертывании $ path был «authenticate», а здесь «/rest/authenticate".
$path = $request->getUri()->getPath ();
Есть идеи, как это отладить?
Мне кажется, я мог бы использовать только один сервис (по умолчанию), но
example.com/
указывает на public_html / rest / index.php
что не очень хорошо для меня, так как я хочу / буду приложением angularjs и REST-частью с отдыхом / в пути.