我们在ASP.Net中有PHP中的httphandlers吗?

时间:2011-05-04 02:56:34

标签: php asp.net httphandler

在ASP.Net中我们有Httphandlers,它可以解析请求并相应地重定向用户,主要是我们使用它们进行网址重写等。

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

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

3 个答案:

答案 0 :(得分:3)

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

GET /index.php   HTTP 1.1

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

HTTPHandlers通过查看传入请求并将该请求映射到一段代码(可能是一个函数)来工作,但它可以告诉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并在许多函数之间切换以处理请求。

答案 1 :(得分:1)

一些php框架提供类似的功能。如果你想在php中重定向,你可以直接设置标题

eg
header('Location: http://www.invalid.com/newpage.pgp');
exit; // make sure to exit or the script will keep executing

如果你想要当前的网址等,你需要查询$ _SERVER var

试试这个,看看你可以从服务器获得什么信息

var_dump($_SERVER);

答案 2 :(得分:1)

您必须实现自己的机制或使用框架。 Zend框架请求经历了类似的概念,但仍然与处理程序完全不同。

相关问题