php - PHP 中是否有像 ASP.Net 中那样的 httphandlers

标签 php asp.net httphandler

在 ASP.Net 中,我们有 Httphandlers,它可以解析请求并相应地重定向用户,大多数情况下我们将它们用于 url 重写等。

我想知道 PHP 中是否也有这样的功能,如果有的话,一个解释它的示例将会非常有帮助。

例如,如果我在某个服务器上请求图像文件,如果请求来自服务器 x,我想将其重定向到某个页面

最佳答案

如果我正确理解 HTTPHandlers,这通常是通过一些技巧来完成的。显然,任何传入 Web 服务器(IIS、Apache 等)的请求都会尝试与文件匹配。

GET /index.php   HTTP 1.1

此请求将到达 index.php 文件,PHP 将处理该文件,然后将响应发送到客户端。显然,客户端将看到 PHP 产生的任何输出。

HTTPHandler 的工作方式是查看传入的请求并将该请求映射到一段代码(可能是一个函数),但它可以告诉 Web 服务器客户端应如何通过配置访问该代码。

以下是an example borrowed from microsoft它说明了映射。

<httpHandlers>
     <add verb="*" path="*.sync" type="MyHandler.SyncHandler, MyHandler" />
</httpHandlers>

在 PHP 中,这可以通过两步过程完成。首先,Web 服务器需要将所有请求路由到单个 PHP 文件。其次,该 PHP 文件必须指导程序流程。

在 Apache 中,您可以使用网站根目录中的 .htaccess 文件配置路由位。这个example会将磁盘上不存在的任何内容路由到 index.php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

从这里开始,PHP 只需要知道用户正在寻找哪个 url,并决定要做什么。这可以通过使用从 Apache 传递的 REQUEST_URI 值来完成。

$_SERVER['REQUEST_URI'];

因此,如果用户请求:

GET /profile/settings  HTTP 1.1

REQUEST_URI 将是:

$url = $_SERVER['REQUEST_URI'];
echo $url; // => "/index.php/profile/settings"

除此之外,人们还可以将正则表达式应用于 REQUEST_URI 并在多个函数之间切换来处理请求。

关于php - PHP 中是否有像 ASP.Net 中那样的 httphandlers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877992/

相关文章:

php - 如何找到页面加载时调用的所有 php 文件的列表?

asp.net - 从 ASP.NET Core Web API 将多 GB 文件流式传输到 AWS S3

asp.net - Membership Generate Password 字母数字密码?

seo - 所有搜索引擎都接受 sitemap.axd 吗?

c# - 将 XmlTextWriter 与 MemoryStreams 一起使用时出现问题

c# - Server.Transfer 到 HttpHandler

javascript - 输入变化更新价格div

PHP mySQL ~回显表和列未正确显示

c# - 创建供 ASP.NET 应用程序中的所有线程使用的静态 Regex 对象是否有效?

php - 如何获取远程 HTML 页面的内容