asp.net 的IHttpModule 接口具有很大的作用,我们可以使用实现的模块进行全局的控制,但是在学习php 的过程中也想实现类似的功能,查找php 的文档,自己没有找到,
但是我们大家应该知道的是可以使用rewrite 的方式,将所用的请求,重定向到一个可以进行全局处理的页面中,以此就可以实现类似的功能了。
我进行php 开发使用的是apache 服务器,因此就直接借用了apache 服务器的rewrite功能了,步骤如下:
1.apache服务器的rewrite功能的配置如下:
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
#LoadModule reqtimeout_module modules/mod_reqtimeout.so
#LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule ssl_module modules/mod_ssl.so
将LoadModule rewrite_module modules/mod_rewrite.so前面的# 去掉即可,可以使用phpinfo 进行查看,我们的配置是否正确。
这是比较简单的,其中有一点必须注意的是,这样还是不行的,
2.我们必须将 AllowOverride None 全部改为 AllowOverride All ,这个配置的目的
可以从配置的注释中看出来
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
我们使用了.htaccess 文件进行rewrite的配置。
3.进行php 站点的创建
比较简单直接使用zend studio 记性创建即可,
大家可以看到文件夹的布局 其中.htaccess 就是我们进行rewrite的配置的,index.php是我们进行全局处理的php页面,
html5shiv.js 是其他站点,或者是我们的站点可能会引用的将要通过带参数的js 文件进行需要验证,或者进行用户判断的原始请求内容
这里大家可以随意发挥,可以设计出这样的东西就是对于已经通过验证的直接返回js 的原始内容,对于没有通过的返回错误的提示即可,
实现起来还是比较简单的。
其中.htaccess 的配置如下:
RewriteEngine On
RewriteRule ^.*$ index.php
index.php 的代码如下:
<?php header("content-type:text/html"); $string= $_SERVER['QUERY_STRING']; $url=$_SERVER['REQUEST_URI']; $username=$_GET['username']; echo 'username is :'.$username.'<br>'; $id=$_GET['id']; echo 'id is :'.$id.'<br>'; $userid=$_GET['uid']; echo 'userid is :'.$userid.'<br>'; echo 'the query string is :'.$string.'<br>'.'the url is :'.$url.'<br>'; ?>
代码是比较简单的,就是获取查询的字符串,并显示,和普通的php 获取参数没有区别。
(代码在页面上显示有问题,但是在编辑器中是没事的,不太会用这个编辑器
,部分变量的命名大家应该是知道的)。
4.需要引用js 脚本的页面的代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> new document </title> <meta name="generator" content="editplus" /> <meta name="author" content="" /> <meta name="keywords" content="" /> <meta name="description" content="" /> <script type="text/javascript" src="http://localhost:8888/first/public/html5shiv.js?username=jack&id=8&uid=258" ></script> <script type="text/javascript" src="json.js" > </script> </head> <body> </body> </html>
页面比较简单,大家可以直接存储为单独的文件即可,不需要和php 站点在一起。
5.运行引用js 的web 页面通过firebug查看的返回信息界面
从请求的js 我们返回给予调用者的信息如上所示。原始的内容应该是一段压缩了的js 脚本,通过这种方式我们就可以实现类似
asp.net 的IHttpModule 的一些功能,还是比较方便的,我配置的rewrite泛微比较的广,实际中如果只是为了,进行js 脚本的处理,可以直接
对于js 文件进行rewrite即可。以上只是自己在实现使用asp.net IHttpModule 处理js 文件参数之后,想使用php进行获取js 文件参数时的一种
尝试。如果大家在使用一些redis 或者nginx 等类似的缓存,代理软件,我们就可以设计出一个基于js文件参数的用户验证处理了。