我需要重新映射从*.php!foo=bar
到*.php?foo=bar
的所有请求
在Google App Eninge main.yaml
我试过了:
- url: /(.*)php5!(.*)$
script: \1php5?\2
但它只会导致错误。 问题源于"?"。
即使是
script: \1php5?foo=bar
确实会导致错误。
答案 0 :(得分:1)
您将无法将!(.*)
部分重新映射到app.yaml
内的查询字符串,因为应用引擎sdk会将script:
参数视为include()
的文件}和include("somefile.php5?foo=bar");
仅在php文件名包含查询字符串时才有效。
您可以尝试这样的事情:
app.yaml 将所有!
个请求路由到单个php脚本
- url: /(.*)php5!(.*)$
script: router.php
router.php 将!
翻译为?
然后执行301重定向
<?php
$url = implode('?', explode('!', $_SERVER['PATH_INFO'], 2));
// 301 Moved Permanently
header("Location: {$url}", true, 301);