在 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/