我想使用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
我认为处理程序没有抓住它。有正确的线索吗?
答案 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
不是有效的脚本文件路径。