一、伪静态----正则规范:
$reg = '/^host=([\d.]+)/ix';
正则特殊说明: 环视基础,自行百度/google
(?:pattern) 非捕获匹配
(?!pattern)
(?<!pattern)
(?=pattern)
(?!=pattern)
输入的url是:
http://www.1366768.com/blog.php/1,2,332,12.html
但是后台处理时当成
http://www.1366768.com/blog.php/a=1&b=2&c=332&d=12.html
$path_info = $_SERVER['PATH_INFO'];
//正则规则,要用单引号,不要用双引号。
$reg = '/(\d+)\,(\d+),(\d+)\.html/i';
preg_match($reg, $path_info, $match);
echo "<pre>";
print_r($match);
实例1.
<?php
$str = "asdfasd按规定sadfasdf2324kj23kk23撒地方可33";
//查询出有多少汉字、英文字母、数字
/*utf-8 16进制
汉字范围是:\x4e00-\x9fa5
*/
//例一=================================================
$str = "asdfasd按规定sadfasdf2324kj23kk23撒地方可33";
//查询出有多少汉字、英文字母、数字
$reg = '/[\x{4e00}-\x{9fa5}]/iu';
preg_match_all($reg, $str, $match);
echo "<pre>";
print_r($match);
echo '汉字有:'.count($match[0]).'个';
$reg = '/[A-Z]/i';
preg_match_all($reg, $str, $match);
echo "<pre>";
print_r($match);
echo '字母有:'.count($match[0]).'个';
//例二=================================================
//要求取出xxx-yyy-zzz这样的模式的,第二个匹配的zzz
$str = "333-444-777djfadsfasfd222-333-666|asdfasdf222";
$reg = '/([\d])\1{2}-([\d])\2{2}-([\d])\3{2}/iu';
preg_match_all($reg, $str, $match);
echo "<pre>";
print_r($match);
$str = $match[0][1];
$reg = '/([\d])\1{2}/iu';
preg_match_all($reg, $str, $match);
print_r($match);
echo $match[0][2];
exit;
二、伪静态----rewrite(实际应用中,这个用得更多,任然是正则为基础)
http://www.1366768.com/site/index.html?pid=1
变成
http://www.1366768.com/site/index/pid/1.html
伪静态应用----防盗链:
1. 在一个项目中有两个文件夹,public和private
public 任何人都可访问 、private自己访问
在private的目录里面新建一个.htaccess文件,对于private只让127.0.0.1可以访问。
1.1 .htaccess (apache服务器) 这样的话就禁止所有的请求
order deny,allow
deny from all
allow from 127.0.0.1
但是同一个apache里面的多台虚礼主机,其它的就可以访问,这个private里面的内容。
使用正则规范来做:
1.2 在.htaccess写:这个可以让特定的url来访问。
RewriteEngine On
#这句话相当于是if,下面的是if为true时,要执行的语句
RewriteCond %{HTTP_REFERER} !www.yourwanturl.com
#这里就可以增加条件(如果不是你允许的网址,且不是文件,就执行下面的)
RewriteCond %{REQUEST_FILENAME} !-f
#如果没有上面的cond,那么下面的意思就是:如果请求的是一个jpg,就forbidden
RewriteRule .*\.jpg -[F]
RewriteRule .*\.gif -[F]
RewriteRule .*\.js -[F]
RewriteRule .*\.css -[F] #这里就可以增加条件
1.1 php模拟一个http请求,Referer:www.yourwanturl.com,就可以取到img,需要再次改进
2. 外网来的http请求,会在请求头带上referer:发送请求的url
3. 访问a.php然后里面有a.png,b.png会发出3次http请求。
4. ie浏览器,如果404.html文件的大小,小于512B,就提示找不到改网页。
5. 文件大小和占用空间不一样,文件系统格式不同,以最少(4KB)来分配给一个文件
6. 如果在<Directiory>节点配置了Options Index,同时又启用了rewriteEngine On
那么访问任何一个页面,将会看到403禁用提示。因为父级目录本身配置好了,
所以,要么不配置,要么配置一模一样。
针对apache,不过现在我都用nginx。。。只是说明这个问题,两者很多都是相通的
<VirtualHost *:80>
<DocumentRoot "/www/your.com">
ServerName www.your.com
<Directory "/www/your.com">
#options indexes
#allowoverride all 表示到对应的目录的.htaccess去匹配规则
allowoverride all
</Directory>
</VirtualHost>
7. RewriteRule abc.html index.php当abc.html存在,就访问abc.html否则访问index.php
#如果不是一个文件就放回true,然后执行下面语句
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule abc.html index.php