您的位置:首页 > 理论基础 > 计算机网络

使用rewrite 让php 实现类似asp.net 的IHttpModule 进行带参数js文件的参数获取

2014-01-14 14:21 1026 查看
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文件参数的用户验证处理了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐