【问题标题】:Remap ".php!foo=bar" to "php?foor=bar" in Google App Engine PHP main.yaml在 Google App Engine PHP main.yaml 中将“.php!foo=bar”重新映射为“php?foo=bar”
【发布时间】:2015-10-23 06:27:55
【问题描述】:

我需要将来自*.php!foo=bar 的所有请求重新映射到*.php?foo=barGoogle App Eninge main.yaml

我试过了:

- url: /(.*)php5!(.*)$
  script: \1php5?\2

但这只会导致错误。 问题源于“?”。

一个

script: \1php5?foo=bar

确实会导致错误。

【问题讨论】:

  • 关于 Stack 的下一个问题的建议:不要只说“有错误”,复制错误。这对调试很有帮助:)
  • 对不起。谢谢。它说 Fatal error: require(): Failed opening required '[...]/test.php5?foo=bar' (include_path='.:[...]/setup.php on line 147

标签: php google-app-engine yaml


【解决方案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);

【讨论】:

  • 非常感谢。这更优雅。
  • PATH_INFO 仅在本地可用。 REQUEST_URI 在服务器上工作。
  • 好收获。我只在本地检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多