Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在提供PHP文件时删除PHP文件扩展名_Php_Google App Engine - Fatal编程技术网

在提供PHP文件时删除PHP文件扩展名

在提供PHP文件时删除PHP文件扩展名,php,google-app-engine,Php,Google App Engine,我正在尝试从我的站点中的所有*.php文件中删除地址中的文件扩展名。例如,如果用户访问mysite.com/about.php,我希望URL读mysite.com/about 这是我的app.yaml: application: mysite version: 1 runtime: php55 api_version: 1 handlers: # Static files - url: /images/* static_dir: images - url: /css/* static_

我正在尝试从我的站点中的所有
*.php
文件中删除地址中的文件扩展名。例如,如果用户访问
mysite.com/about.php
,我希望URL读
mysite.com/about

这是我的
app.yaml

application: mysite
version: 1
runtime: php55
api_version: 1

handlers:
# Static files
- url: /images/*
  static_dir: images
- url: /css/*
  static_dir: css
- url: /js/*
  static_dir: js

# Routing
- url: /services(.*)
  script: services.php
- url: /portfolio(.*)
  script: portfolio.php
- url: /project(.*)
  script: project.php
- url: /about(.*)
  script: about.php
- url: /contact(.*)
  script: contact.php
- url: /(.*)
  script: index.php

如何在GAE中实现这一点?

如果您只需要执行这种类型的路由,您可以使用以下方法:

application: mysite
version: 1
runtime: php55
api_version: 1

handlers:
# Static files
- url: /images/*
  static_dir: images
- url: /css/*
  static_dir: css
- url: /js/*
  static_dir: js

# Special case, route requests for the root document
- url: /
  script: /index.php
# If the request ends in [something].php, route to that file directly
- url: /(.+\.php)$
  script: /\1
# Map all other requests to scripts of the same name
# so that, eg, /thispage (or /thispage/) routes to /thispage.php
- url: /(.*?)/?$
  script: /\1.php
请注意,使用此方法,您将无法处理404个错误(尽管问题中提供的app.yaml中似乎也没有处理这些错误)。你的app.yaml中的错误处理程序对404不起作用,因为只有当它们不能匹配你提供的任何路由时,它们才会生效

因此,如果您想处理404错误等,您应该做的是从php脚本内部进行路由,如下所示:

-url: /(.*)
 script: /routes.php
和inside routes.php检查$\u SERVER['REQUEST\u URI']变量以查看请求的页面,并相应地提供相应的内容


编辑:感谢@Avinash Raj清理了regex

为什么这个问题是针对gae的?因为我想象要实现这一点,我需要编辑app.yaml文件。除非我错过了另一条路?这正是我使用的环境。很高兴知道。向上投票:)我会从URL中删除(.*)部分,以更好地反映您想要实现的目标,但app.yaml在我看来还是不错的。我确实需要做一些更改(最后的?试图为我提供.php.php文件)。我想到的是:尽管如此,不幸的是,这并不能解决我的问题。当点击
/about
时,它确实为
/about.php
服务,但我希望URL也能反映这一点。也许有办法改变方向?我可能不得不像你提到的那样使用一个单独的
routes.php
。如果找到解决方案,我会回复。在回答中对示例app.yaml进行了编辑,以便您可以直接访问/*.php文件(如/about.php)或通过“友好”url(如/about或/about/)访问它们。在浏览器中重定向和显示新的URL是我认为你不能仅在app.yaml中完成的事情。您必须在php代码中执行重定向(我将其放在一个名为“routes.php”的单独文件中),我想您所说的那种重定向可以在php中执行,如下所示:
header(“Location:$url”)是的,我正在尝试类似的方法(),但是我的开发工具告诉我请求被取消了。我认为这是因为路由试图提供的
.php
文件再次通过路由发送;某种递归。我会继续尝试。routes.php本身不应该通过app.yaml路由。但是,是的,一旦您将浏览器重定向到新的.php地址,您可能会看到它。尝试更新的app.yaml,我在这个答案中发布;
-url:/(.+\.php)$
行检查以“.php”结尾的url并直接发送。url工作正常,但我仍然遇到自动从url中删除
.php
扩展名的问题。