如何在app.yaml中正确路由目录调用?

时间:2018-12-16 12:49:15

标签: .htaccess google-app-engine google-cloud-platform php-5.5

我想使用PHP在Google App Engine app.yaml 中模仿这种 .htaccess 重写:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteRule ^(.*)$ query.php?q=$1 [QSA,NC,L]
</IfModule>

我已经做到了:

runtime: php55
api_version: 1
threadsafe: true

handlers:
  # mod_rewrite by forwarding the requests to query.php?q=...
  - url: /services/(.+)
    script: services/query.php?q=\1

  # Serve images as static resources.
  - url: /(.+\.(gif|png|jpg|ico|svg))$
    static_files: \1
    upload: .+\.(gif|png|jpg|ico|svg)$
    application_readable: true

  - url: /(.+\.(html))$
    static_files: \1
    upload: .+\.(html)$
    application_readable: true

  # Serve php scripts.
  - url: /(.+\.php)$
    script: \1

  - url: /
    static_files: index.html
    upload: index.html
    application_readable: true

但始终找不到错误结果:

  

“ POST / services / login HTTP / 1.1” 404

我认为处理程序没有抓住它。有正确的线索吗?

1 个答案:

答案 0 :(得分:0)

我认为您不能这样做-script:语句不是用于指定完整的URL(及其查询字符串),而只是用于指定脚本的路径。来自Handlers element

  

脚本

     

可选。指定从应用程序根目录到脚本的路径   目录:

...
handlers:
- url: /profile/(.*)/(.*)
  script: /employee/\2/\1.php  # specify a script

您可以通过在第一个处理程序中将script: services/query.php?q=\1替换为script: services/query.php来轻松确认。如果services/query.php脚本开始被调用,则意味着模式匹配可以正常工作,而问题出在脚本规范-services/query.php?q=\1不是有效的脚本文件路径。