在提供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
扩展名的问题。