07
2018
06

重定向和伪静态在网站中的应用

重定向和伪静态在网站中的应用

1.定义

重定向:通过各种方法将各种网络请求重新定个方向转到其他位置(分为内部和外部),用重定向来实现伪静态

伪静态:相对于真实静态来讲的,只是改变了URL的表现形式,实际上还是动态页面,伪静态有和真静态的SEO

2.实现方法

1)通过.htaccess文件配置

.htaccess工作原理

.htaccess文件(或者"分布式配置文件”)提供了针对

每个目录改变配置的方法,即在一个特定的目录中

放置一个包含指令的文件,其中的

指令作用于此目录及其所有子目录

.htaccess性能问题

开启访问页面,要查找所有上级的目录中的.htaccess文件

RewriteEngine on

RewriteRule ^content-([0-9]+)-([0-9]+)-([0-9]+).html index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3

2)通过Apache的主配置文件<Directory>段(需要重启服务)

ALLowOverride None

RewriteEngine On

RewriteRule 你的重写规则

3)使用PHP或者其他脚本语言实现(只能实现外部重定向)

通过PHP脚本语言跳转

header('Location:url');

3.Apache 重写原理

apache rewrite rule.png

4.mod_rewrite

1)Apache的URL操作模块

包括RewriteBase  RewriteRule  RewriteCond  RewriteMap

2)rewrite日志

设置LogLevel alert rewrite:trace8(1~8)

生产模式不要大于trace2

查看apache_error.log日志文件

只能在conf文件中设置,不能在.htaccess中设置

5.RewriteRule语法说明 http://httpd.apache.org/docs/current/rewrite/flags.html

RewriteRule 模式匹配 替换的URL [flags]

模式匹配支持Perl格式的正则表达式、和rewrite

的变量

替换的URL支持模式匹配的结果和rewrite变量

多个flag用逗号隔开[R=302,C]

6.RewriteRule R flag说明

强制外部重定向,后米哦按可以加301或302跳转,不加的话默认302

如 RewriteRule ^/?(.*)\.html /src/$1.php [R=302]

区别与内部重定向,浏览器上的地址会变

7.RewriteRule C flag说明

链接下一条规则

RewriteRule ^/?(.*)\.html /src/$l.htm [C]

RewriteRule ^/?(.*)\.htm  /src/$l.php

与下一条规则成为一个整体,如果这一条不匹配,下一条就不进入了

8.RewriteRule L flag说明

结尾规则,立即停止重写操作,并不再应用其他重写规则

RewriteRule ^(.*) first.php?req=$1 [L]

RewriteRule ^(.*) second.php?req=$1

9.RewriteRule NE flag说明

不对URL中的特殊字符进行 hexcode 转码

RewriteRule ^(.*).htm /index.html#$1 [R,NE]

10.RewriteRule NC flag说明

不区分大小写

RewriteRule ^test/(.*) src/$1 [NC]

11.RewriteRule G flag说明

请求的网页已经失效了(gone)

RewriteRule ^oldurl.*$ - [G]

Apache 服务器会返回410

说明有些页面是有时效性的

12.RewriteRule QSA flag说明

用于在URL中截取查询字符串

RewriteRule ^per/(.*)$ /per.php?person_id=$1 [QSA,R]

访问 /per/123.php?name=xiaoming

13.RewriteBase 语法说明

RewriteBase URL-path

设置了目录级重写的基准URL

RewriteBase /test/

RewriteRule ^(.*)\.shtml$ $1.html

14.RewriteCond语法说明(rewriterule 的条件限制)

1)TestString 使用说明 $1-9

$1-9引用紧跟在RewriteCond后面的RewriteRule中模板中匹配到的数据

如:RewriteCond $1 'xcj1'

RewriteRule ^(.*)\.shtml$ $1.html

2)TestString 使用说明 %{ NAME_OF_VARIABLE}

服务器变量引用

RewriteCond %{HTTP_HOST} "127.0.0.1"

RewriteRule ^(.*)\.htm http://localhost/$1.html [R]

服务器变量 ,引用方法是:%{NAME_OF_VARIABLE} NAME_OF_VARIABLE可以是下表列出的字符串之一:

HTTP头连接与请求

HTTP_USER_AGENT

HTTP_REFERER

HTTP_COOKIE

HTTP_FORWARDED

HTTP_HOST

HTTP_PROXY_CONNECTION

HTTP_ACCEPT     REMOTE_ADDR

REMOTE_HOST

REMOTE_PORT

REMOTE_USER

REMOTE_IDENT

REQUEST_METHOD

SCRIPT_FILENAME

PATH_INFO

QUERY_STRING

AUTH_TYPE

服务器自身    日期和时间    其它

DOCUMENT_ROOT

SERVER_ADMIN

SERVER_NAME

SERVER_ADDR

SERVER_PORT

SERVER_PROTOCOL

SERVER_SOFTWARE   TIME_YEAR

TIME_MON

TIME_DAY

TIME_HOUR

TIME_MIN

TIME_SEC

TIME_WDAY

TIME      API_VERSION

THE_REQUEST

REQUEST_URI

REQUEST_FILENAME

IS_SUBREQ

HTTPS

3)TestString使用说明 %1-9

%1-9 RewriteCond 条件中最后符合的条件中的分组成分

RewriteCond %{HTTP_HOST} "127.0.0.(.*)"

RewriteRule %1 '1'

RewriteRule ^(.*)\.htm http://localhost/$1.html [R]

说明:%1就是上一层RewriteCond中(.*)匹配到的内容

4)CondPattern 使用说明

-d 是否为目录 -f是否为文件 -F文件存在并且可以访问

RewriteCond C:/wamp/www/ -d

5)[flags]使用说明

[NC] 大小写不敏感

[OR]条件判断的或,如果不加默认是and

RewriteCond C:/wamp/www/index.php -F [OR]

RewriteCond C:/wamp、license.txt  -F

RewriteRule ^(.*)\.shtml$ $1.html

15.RewriteMap 语法说明 (只能在主配置文件配置,主配置项外面配置)

主配置文件中配置项配置语法

RewriteMap MapName MapType:MapSource

说明:  MapName:命名给RewriteRule 调用

MapType:map文件的类型有 txt、rnd

MapSource:map 文件路径

1)txt格式  配置项语法:RewriteMap pages txt:C:/wamp/map.txt

${MapName:LookupKey|DefaultValue}

RewriteMap pages txt:C:wamp/map.txt

配置文件内容:

test1 pagetest1

test2 pagetest2s

RewriteRule ^(.*).shtml ${pages:$1|page}.php

2)rnd格式  配置项语法:RewriteMap dirs rnd:C:/wamp/dirs.txt

随机映射 RewriteMap servers rnd:C:/wamp/rnd.txt

配置文件内容:

URL1 S1|S2|S3

URL2 S4|S5

RewriteRule "^/(.*\.(png|gif|jpg))" "http://${servers:URL1}/$1"

16.临时重定向和永久重定向

区别和作用

不是顶级目录的A页面做301定向到其他目录B,则可以正常收录B页面

而顶级目录的A页面做302定向到其他目录B,则收录的是A页面

17.应用

1)防盗链(基于重定向的文件访问控制)

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !www.lyc.com [NC]

rewriteRule \.(gif|jpg|png)$ - [F,NC]

2)限制访问者的IP列表

RewriteMap hosts-deny txt:C:/wamp/hosts.deny

RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT_FOUND}!=NOT-FOUND [OR]

RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT_FOUND}!=NOT-FOUND [OR]

rewriteRule ^ - [F]

3)限制迅雷下载

通过特征限制

先通过代码分析出迅雷的特征

RewriteCond %{HTTP_USER_AGENT} 2.0.50727 [NC,OR]

RewriteCond %{HTTP_USER_AGENT} ^BlackWido [NC]

RewriteRule . abuse.txt

« 上一篇 下一篇 »

公告:

跟着我一起每天进步一点点,让学习成为一种习惯!

公告:

跟着我一起每天进步一点点,让学习成为一种习惯!