php伪静态的写法(apache伪静态规则)
php程序实现伪静态url如下。
代码如下 | 复制代码 |
<?php |
如果你有服务器权限我觉得还是使用apache%CE%B1%BE%B2%CC%AC/" target="_blank">apache伪静态
一、Apache配置:
进入/etc/httpd/conf/目录下,打开httpd.conf文件。
启用rewrite
# LoadModule rewrite_module modules/mod_rewrite.so 去除前面的 #
启用.htaccess
AllowOverride None 修改为: AllowOverride All
二、Rewrite写法
服务器有配置文件不可能由我们来改,所以大多情况下要在网站的根目录下建一个.htaccess文件。
代码如下 | 复制代码 |
RewriteEngine on //启动rewrite引擎 RewriteRule ^/index([0-9]*).html$ /index.php?id=$1 //“([0-9]*)” 代表范围 用(.*)代表所有,下同。 RewriteRule ^/index([0-9]*)/$ /index.php?id=$1 [R] //虚拟目录 |
三、mod_rewrite 规则修正符
1) R 强制外部重定向
2) F 禁用URL,返回403HTTP状态码。
3) G 强制URL为GONE,返回410HTTP状态码。
4) P 强制使用代理转发。
5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N 重新从第一条规则开始运行重写过程。
7) C 与下一条规则关联
如果规则匹配则正常处理,以下修正符无效
8) T=MIME-type(force MIME type) 强制MIME类型
9) NS 只用于不是内部子请求
10) NC 不区分大小写
11) QSA 追加请求字符串
12) NE 不在输出转义特殊字符 %3d$1 等价于 =$1
例1
CURL使用POST提交XML数据
代码如下 | 复制代码 |
$url = "http://www.111cn.net"; |
在PHP中CURL使用POST提交XML数据时,一定要定义content-type为xml,要不然默认是text/html!
例2,post表单数据
curl是利用URL语法在命令行方式下工作的文件传输工具。
php教程实例:
代码如下 | 复制代码 |
<?php set_time_limit(0); @date_default_timezone_set('Asia/Shanghai'); function curlrequest($url,$postfield,$proxy=""){ $proxy=trim($proxy); $user_agent ="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"; $ch = curl_init(); // 初始化CURL句柄 if(!empty($proxy)){ curl_setopt ($ch, CURLOPT_PROXY, $proxy);//设置代理服务器 } curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL //curl_setopt($ch, CURLOPT_FAILONERROR, 1); // 启用时显示HTTP状态码,默认行为是忽略编号小于等于400的HTTP信息 //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//启用时会将服务器服务器返回的“Location:”放在header中递归的返回给服务器 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);// 设为TRUE把curl_exec()结果转化为字串,而不是直接输出 curl_setopt($ch, CURLOPT_POST, 1);//启用POST提交 curl_setopt($ch, CURLOPT_POSTFIELDS, $postfield); //设置POST提交的字符串 //curl_setopt($ch, CURLOPT_PORT, 80); //设置端口 curl_setopt($ch, CURLOPT_TIMEOUT, 25); // 超时时间 curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);//HTTP请求User-Agent:头 //curl_setopt($ch,CURLOPT_HEADER,1);//设为TRUE在输出中包含头信息 //$fp = fopen("example_homepage.txt", "w");//输出文件 //curl_setopt($ch, CURLOPT_FILE, $fp);//设置输出文件的位置,值是一个资源类型,默认为STDOUT (浏览器)。 curl_setopt($ch,CURLOPT_HTTPHEADER,array( 'Accept-Language: zh-cn', 'Connection: Keep-Alive', 'Cache-Control: no-cache' ));//设置HTTP头信息 $document = curl_exec($ch); //执行预定义的CURL $info=curl_getinfo($ch); //得到返回信息的特性 //print_r($info); if($info[http_code]=="405"){ echo "bad proxy {$proxy}n"; //代理出错 exit; } //curl_close($ch); return $document; } //请求URL $url="http://example.cn/getInfo.php"; //POST提交数据,可用HTTPWATCH查看 $postfield="userName=test&year=2008&passWord=123456&Submit=%CC%E1%BD%BB"; //代理服务器 $proxy = ''; //请求 $str=curlrequest($url,$postfield,$proxy); //输出结果 echo $str; |
例3,一个简单利用curl post登录实例
模拟post登陆提交表单问题
SOOPY类:
之前写过一个程序是模拟post来推送一些资源
起初跟大家一样,各种百度谷歌,首先想到的就是用PHP自带的库CURL这个来模拟
自己想偷偷懒看有没有更简单的类来实现呢?
还是被我发现了,他就是snoopy类。(中文名史卢比)
代码如下 | 复制代码 |
//首先要引用这个类 |
//$postforms,$postfiles为2中类型的值,其中$postfiles为上传文件数组
上面这个例子就是实现了一个POST表单提交的案例。由于需求比较复杂,这个snoopy的功能不能满足于我的需求,于是又开始
去进攻CURL。
CURL扩展库:
这个库是比较成熟的一个扩展库,功能很强大。强大到可以模拟浏览器的任何一个动作。
需求是这样子的:
第一登陆一个网站后台
第二接口页面,然后开始推送大量资源
(这里面的具体逻辑就缩略了)
为了操作方便,我把我需要模拟的几个函数封装到了一个类里面,简短代码如下:
代码如下 | 复制代码 |
/* 模拟资源推送类 2012-09-14 by POOY */ class TuisongPost{ //用构造登陆认证 function TuisongPost(){ //存放COOKIE的文件 global $cookie_jar; $this->cookie_jar = tempnam('./tmp','cookie'); $url = "http://www.你的地址"; $post_data = array( "username" => "admin","password" => "admin" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_jar); //保存cookie信息 $output1 = curl_exec($ch); curl_close($ch); //echo $this->cookie_jar."n"; } /*得到组ID*/ function getGid($groupname,$channel,$lanmu){ $url = "http://XXXX.com/creategroup"; //格式化要推送的数据 $data = $this->getGidArr($groupname,$channel,$lanmu); $ch = curl_init(); $Ref_url = "http://www.你的地址"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $Ref_url); //伪装REFERER curl_setopt($ch, CURLOPT_POST, 1); //post方式提交数据 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据,而不是直接输出 curl_setopt($ch, CURLOPT_HEADER, 0); // 设置是否显示header信息 0是不显示,1是显示 默认为0 curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar); //发送cookie文件 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //发送POST数据 $output2 = curl_exec($ch); //发送HTTP请求 //这个返回值是用作判断的依据 return $output2; curl_close($ch); //$this->unlink($this->cookie_jar); } //推送数据 function sendPic($note,$groupid,$groupindex,$img){ $url = "http://XXXX/addimage"; $groupid = intval($groupid); $data = $this->sendPicArr($note,$groupid,$groupindex,$img); $ch = curl_init(); $Ref_url = "http://www.你的地址"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $Ref_url); //伪装REFERER curl_setopt($ch, CURLOPT_POST, 1); //post方式提交数据 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据,而不是直接输出 curl_setopt($ch, CURLOPT_HEADER, 0); // 设置是否显示header信息 0是不显示,1是显示 默认为0 curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar); //发送cookie文件 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //发送POST数据 $output2 = curl_exec($ch); //发送HTTP请求 return $output2 ; curl_close($ch); //$this->unlink($this->cookie_jar); } /*推送数据操作*/ function sendMes($url,$img,$imgdesc,$groupid,$groupname,$channel,$lanmu) { //var_dump($this->cookie_jar); //exit(); $url = "http://XXXX/add"; $data = $this->getArr($img,$imgdesc,$groupid,$groupname,$channel,$lanmu); $ch = curl_init(); $Ref_url = "http://www.你的地址"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $Ref_url); //伪装REFERER curl_setopt($ch, CURLOPT_POST, 1); //post方式提交数据 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据,而不是直接输出 curl_setopt($ch, CURLOPT_HEADER, 0); // 设置是否显示header信息 0是不显示,1是显示 默认为0 curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar); //发送cookie文件 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //发送POST数据 $output2 = curl_exec($ch); //发送HTTP请求 curl_close($ch); //$this->unlink($this->cookie_jar); } function getArr($img,$imgdesc,$groupid,$groupname,$channel,$lanmu) { $post_data = array( //windows使用如下写法,linux不适用 //"img"=>"@".$img.";type=image/jpeg", "img"=>"@".$img, "imgdesc"=>$imgdesc, "groupid"=>$groupid, "groupname"=>$groupname, "channel"=>$channel, "lanmu"=>$lanmu, "cdate"=>date('Y-m-d') ); return $post_data; } //格式化getGidArr function getGidArr($groupname,$channel,$lanmu) { $post_data = array( "groupname"=>$groupname, "channel"=>$channel, "lanmu"=>$lanmu, "cdate"=>date('Y-m-d') ); return $post_data; } //格式化sendPicArr function sendPicArr($note,$groupid,$groupindex,$img) { $post_data = array( "notes"=>$note, "id"=>$groupid, "index"=>$groupindex, "cdate"=>date('Y-m-d'), //windows使用如下写法,linux不适用 //"img"=>"@".$img.";type=image/jpeg", "img"=>"@".$img ); return $post_data; } //清理cookie文件 function unlink($cookie_jar){ unlink($cookie_jar); } } |
以上就是用CURL来完美解决了这个问题,他能有效的解决cookie存储问题。
ucenter我想有不少朋友会用到了,就是一个会员同步功能了,我们经常会把几个系统或不同论坛整合起来,下面我来给各位同学介绍一下。UCenter同步流程:
前提是需要在Ucenter上面添加好需要同步登录的应用(至少2个才能看到效果),并且显示:通信成功
假如我添加了A,B两个应用网站
1.首先当A站登录时,登录成功后,处理实质是调用uc_client提供的方法向UCenter获取2个脚本代码(A、B站),这两个脚本代码就是访问A、B两个站的api/uc.php中的登录方法,可以在方法中做登录所需session和cookie操作。
2.当登出时,操作和登录是一样的,都需要向UCenter获取2个脚本代码,目的是用来触发A、B站的api/uc.php中登出方法。
重点:当获取到2个脚本代码后一定需要在输出让浏览器运行,否则将不会实现同步登录登出。
建议:开发调试的时候,借助浏览器监控来查看返回输出值,我当时用的是chrome F12 后 打开Network标签 。
实例详解
所谓单点登录,无非就是几个站点共用一个用户中心,实现同步登陆,同步退出。
服务器端:Loog SSO
客服端: ucenter,说实话dz商业化确实让php发展了不少。
ucenter 基本原理:
其实最终还是 用户去登录 只是采用了ajax 用户不会发现。
我们来看看和ucenter的具体程序:
config.php [PHP代码]:
代码如下 | 复制代码 |
define(‘UC_CONNECT’, ’mysql’); // 连接 UCenter 的方式: mysql/NULL, 默认为空时为fscoketopen() //数据库相关 (mysql 连接时, 并且没有设置 UC_DBLINK 时, 需要配置以下变量) //一些 Cookie 设置 |
配置文件写好后,到ucenter后台里面添加一个应用记住是自定义的 ‘UC_KEY’必须和config.php里面相同
接下来就是你的主目录下的api/uc.php
例如应用url 填写为 http://www.111cn.net 那么我就有对应的http://www.111cn.net/api/uc.php
如果要自定义的话 请确认你的对应关系。
最重要的就是api/uc.php ,同步登录就是访问各个应用的uc.php 关于这个dz已经给了demo
[PHP代码]:
代码如下 | 复制代码 |
define(‘API_DELETEUSER’,0); //note 用户删除 API 接口开关 define(‘API_RENAMEUSER’, 0); //note 用户改名 API 接口开关 define(‘API_GETTAG’, 0); //note 获取标签 API 接口开关 define(‘API_SYNLOGIN’, 1); //note 同步登录 API 接口开关 define(‘API_SYNLOGOUT’, 1); //note 同步登出 API 接口开关 define(‘API_UPDATEPW’, 0); //note 更改用户密码 开关 define(‘API_UPDATEBADWORDS’, 0); //note 更新关键字列表 开关 define(‘API_UPDATEHOSTS’, 0); //note 更新域名解析缓存 开关 define(‘API_UPDATEAPPS’, 0); //note 更新应用列表 开关 define(‘API_UPDATECLIENT’, 0); //note 更新客户端缓存 开关 define(‘API_UPDATECREDIT’, 0); //note 更新用户积分 开关 define(‘API_GETCREDITSETTINGS’, 0); //note 向 UCenter 提供积分设置 开关 define(‘API_GETCREDIT’,0); //note 获取用户的某项积分 开关 define(‘API_UPDATECREDITSETTINGS’, 0); //note 更新应用积分设置 开关 |
这些参数都是向别的应用提供的功能开关
最后关于 自己的页面如何同步登录 别的应用
[PHP代码]:
代码如下 | 复制代码 |
include_once ’../config.php’; |
你的验证登录部分
代码如下 | 复制代码 |
list($uid, $username, $password) = uc_user_login($_POST[username], $_POST[password]);//进入ucenter验证 $ucsynlogin = uc_user_synlogin($uid);//同步登录 echo $ucsynlogin;//因为是ajax 要echo |
只用php,康盛的解决方案是比较不错的了,而且利用了p3p头实现了 不同域名 单点登录
缺点就是采用ajax 客服端请求 ,如果有10个以上应用,登录速度就慢下来了,这时候就可以考虑下七夜的Loong SSO
了解了以上的东东 php的CMS和ucenter通信 就不难了。
这里给大家介绍一个移动设备检查类了,从google找到的mobile-detect类,这个类可以ct判断android、ios、Tablet平板,浏览器,等比较完美完善的判断ipad,iPhone,win8等使用方法
代码如下 | 复制代码 |
<?php
if($detect->isTablet()){ if($detect->isiOS()){ if($detect->isAndroidOS()){ |
官方实例
代码如下 | 复制代码 |
<?php
?><!DOCTYPE html>
<p>This is a <b><?php echo $deviceType; ?></b>. Your UA is <b class="<?php echo $deviceType; ?>"><?php echo htmlentities($_SERVER['HTTP_USER_AGENT']); ?></b></p>
</section> </body> |
php-mobile-detect文件下载地焉: http://file.111cn.net/upload/2013/10/M.rar
PHP字符串处理-将手机号码生存图片
代码如下 | 复制代码 |
<?php $str = '13087263453'; |
例2
代码如下 | 复制代码 |
//定义图片宽高 //图片色彩设置 //绘制图片边框 //srand((double)microtime()*1000000); //取得目前时间的百万分之一秒值,以执行时的百万分之一秒当乱数种子
}else{ ?> |
相关文章
Apache启动报错No space left on device: AH00023该怎么解决
Apache启动报错No space left on device: AH00023错误可能是进程导致了,虽然小编不知道什么原因但网上提供的解决办法确实是可以解决我们的问题,下面来看看。对于这类错误是因为linux系统的ipc信号量造成的,apache启动时...2015-10-21- 本文我们将分享apache配置黑名单和白名单,apache层的账户权限控制,以及apache黑名单白名单过滤功能,apache rewrite规则实现白名单。 apache配置黑名单和白名单的两...2016-09-14
- 今天在用百度工具检测时发,发现有个提示如下 原来可以开启gzip啊,因为我的是apache所以和iis不同,经过网站搜索开启方法如下 一,找到你的httpd.conf文件,打开找到如下 ...2016-01-28
解决PHPstudy Apache无法启动的问题【亲测有效】
这篇文章主要介绍了PHPstudy Apache无法启动的问题及解决方法【亲测有效】,本文给大家总结了三种方法供大家参考,需要的朋友可以参考下...2020-10-30apache http server遇到了一个问题,需要关闭
重装系统后,重新安装了xamp,最近启动的时候经常报apache http server遇到了一个问题,需要关闭,显示如图: 解决方法:查看szModName报错的模块,然后把PHP安装目录下对应的模块...2016-01-28Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程详解
Windows Server 2016 上配置 APACHE+SSL+PHP+perl怎么配置?小编推荐了一篇介绍Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程,有需要的同学快来看看吧! ...2017-07-06nginx+apache+mysql+php+memcached+squid搭建集群web环境
当前,LAMP开发模式是WEB开发的首选,如何搭建一个高效、可靠、稳定的WEB服务器一直是个热门主题,本文就是这个主题的一次尝试。...2016-01-27- 今天在使用西部数码空间时发现里面有很多定义好的伪静态规则了,下面我来给大家介绍一下在后面主机面板中配置使用伪静态功能吧,希望文章对各位会带来帮助。...2016-10-10
- 这篇文章主要介绍了隐藏Nginx或Apache以及PHP的版本号的方法,主要用来防止针对性的漏洞攻击,需要的朋友可以参考下...2016-01-05
- 默认情况下,apache安装完以后,是不允许被cache的。如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设置,当然前提是在安装apache的时候要激活mod_c...2016-01-28
- Order A, B (其中,A和B均可以代表allow或者deny,以下conlist表示控制列表) A from conlist1 B from conlist2 那么最终访问控制的结果为:(以(A)表示A的控制范围,) (A)= (conli...2016-01-28
- Satisfy directive Syntax: Satisfy 'any' or 'all' Default: Satisfy all Context: directory, .htaccess Status: core Compatibility: Satisfy is only available...2016-11-25
Apache在httpd.conf配置文件中设置伪静态(Rewrite)
.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可 以允许用户通过.htaccess文件自...2016-01-28Win7/Windows2003下IIS6.0、IIS7.5的伪静态组件安装和伪静态配置方法
Win7Windows2003下IIS6.0、IIS7.5的伪静态组件安装和伪静态配置方法,还包括常用的伪静态规则使用方法...2016-01-27- 任何二级域名,均跳转到www下。 本地测试站点:www.111cn.net,下面是apache里的配置: 代码如下 复制代码 <VirtualHost *> <Directory "D:/webroot/myp...2016-01-28
- 下载下列文件至/usr/local/src/ apache(Unix平台最流行的WEB服务器平台)2.tar.gz MySQL(和PHP搭配之最佳组合)-5.0.22.tar.gz php(做为现在的主流开发语言)-5.1.2...2016-11-25
以动态模块的方式安装apache2.0.44+PHP4.3.0
经过一天的努力,终于装完了apache2.0.44+PHP4.3.0呵呵, 不禁佩服自己的愚蠢 :( 以前安装都是用php静态模块的方式,似乎在apache2以上的版本上行不通(猜测而已:)) 安装过程简...2016-11-25- AuthName directive Syntax: AuthName auth-domain Context: directory, .htaccess Override: AuthConfig Status: core This directive sets the name of the author...2016-11-25
- 每个网管最黑暗的时候莫过于服务器被攻击后的束手无策,其实服务器遭受攻击后,服务器的记录文件详细地记录了黑客活动的蛛丝马迹。...2016-01-27
- 这篇文章主要介绍了iis伪静态中文url出现乱码的解决办法,需要的朋友可以参考下...2017-07-06