之前对于重定向与伪静态的配置语法有点生疏,今天抽空系统学习了一下并且写了一些例子便于理解。
本篇文章原文地址---友儿の博客
文章内容包含以下几个方面
什么是伪静态?
- 伪静态是相对真实静态来讲的,
- 伪静态只是改变了URL的表现形式,实际上还是动态页面
- 伪静态有了真静态一样的SEO
什么是伪静态和重定向?
- 通过各种方法将各种网络请求重新定个方向转到其它位置(分为内部和外部)
- http标准协议中的3xx ( 主要用302 , 303 )
- 用重定向技术来实现伪静态
.htaccess性能问题
- I/O消耗
- 开启后访问页面,要查找所有.上级的目录中的.htaccess文件
- 可以被主配置文件替代
mod_rewrite简介
- Apache的URL操作模块
- 包含RewriteBase RewriteRule、 RewriteCond、RewriteMap
LogLevel操作示范
- 设置LogLevel alert rewrite:trace8 ( 1~8 )生产模式不要大于trace2
- 查看apache_ error.log日志文件
- 只能在conf文件中设置,不能在.htaccess
RewriteRule语法说明
- RewriteRule模式匹配替换的URL [flags]
- 模式匹配支持Perl格式的正则表达式、和rewrite的变量
- 替换的URL支持模式匹配的结果和rewrite变量
- 多个flag用逗号隔开[R= 302,C]
- 实现伪静态SEO的实践方法
- 实现防盗链、限制迅雷、文件访问控制等的重定向常规应用
实现动态镜像、集群网站、负载均衡等重定向高级应用
1、RewriteRule [flag] 参数说明
- [R=301]永久 有利于seo 评分给新地址
- [R=302]临时 默认302 重定向 给新地址新的评分 seo作弊
RewriteEngine on
RewriteRule ^(.*)\.htm$ /$1.html [R=301]
2、[C]连接下一句作为一个整体
RewriteEngine on
RewriteRule ^(.*)\.htm$ /$1.html [C]
RewriteRule ^(.*)\.html$ /$1.php
3、[L] 匹配到了就停止下面规则
RewriteEngine on
RewriteRule ^(.*) first.php?url=$1 [L]
RewriteRule ^(.*) second.php?url=$1
4、[R,NE]不对URL中的特殊字符进行hexcode 转码 多个flag用英文逗号分开
RewriteEngine on
RewriteRule ^(.*)\.htm /index.html#$1 [R,NE]
5、[NC]不区分大小写
RewriteEngine on
RewriteRule ^test/(.*)\.htm /tmp/$1.htm [NC]
6、[G]请求的网页已经失效(Gone) 对应http协议的410(如下载连接按时控制下载)
RewriteEngine on
RewriteRule ^h/.*$ - [G]
7、[QSA]用于在URL中截取查询字符串(值)
RewriteEngine on
RewriteRule ^pre/(.*)$ /pre.php?url=$1 [R,QSA]
8、RewriteBase 语法 RewriteBase (设置了目录级重写的基准URL)
RewriteEngine on
RewriteBase /test
RewriteRule ^(.*)\.htm$ $1.html [R]
9、RewriteCond TestString语法 可以加[flags] $1-$9 匹配的是RewriteRule的元
- e.g.1
RewriteEngine on
RewriteCond $1 "test"
RewriteRule ^(.*)\.htm $1.html
e.g.2 直接调用服务器变量
RewriteEngine on
RewriteCond %{HTTP_HOST} "127.0.0.1"
RewriteRule ^(.*)\.htm http://localhost/$1.html [R=301]
10、RewriteCond %1-9 最后一个符合条件的分组成分
RewriteEngine on
RewriteCond %{HTTP_HOST} "127.0.0.(.*)"
RewriteCond %1 "2"
RewriteRule ^(.*)\.htm http://localhost/$1.html [R]
11、CondPattern 语法 -d 是否是目录 是否是文件
12、[NC] 大小写不敏感 同上
13、[OR] 条件判断的或 如果不加默认是and
RewriteEngine on
RewriteCond E:/phpStudy -d [OR]
RewriteCond E:/phpStudy1 -d
RewriteRule ^(.*)\.htm $1.html
14、RewriteMap 语法说明 (性能提升) 参数说明 不能在.htaccess
- MapName : 命名RewriteRule 调用
- MapType: map 文件的类型有 txt、rnd
MapSource: map 文件路径
e.g.1 txt文件 RewriteMap MapName MapType:MapSource
- http.d中不要配置在总配置Director内部
RewriteMap pages txt:e:/map.txt
- e:/map.txt 写入映射关系
test1 pagetest1
test2 pagetest2
- 重启服务器、在.htaccess配置
RewriteEngine on
RewriteRule ^(.*)\.shtml ${pages:$1}
http://127.0.0.1/test2.shtml
e.g.2 rnd文件 随机映射 RewriteMap server rnd:e:/map1.txt
- httpd-conf中不要配置在总配置Director内部
RewriteMap dirs rnd:e:/map1.txt
- e:/map1.txt 写入映射关系
URL1 s1|s2|s3
URL2 w1|w2
- 重启服务器
- 在.htaccess配置 访问不成功时访问root
RewriteEngine on
RewriteRule ^(.*)\.shtml /${dirs:$1|root}/$1.php
15、rewrite 正则表达式
.匹配任意字符
+重复匹配1到多个
*匹配0到多个
^开始
$结束
?可选
[一个多个字母]
[^排除这些内容]
|或者
取值$1~$N来访问
16、临时重定向与永久重定向
- 区别和作用(面向搜索引擎机器人)
- 不是顶级目录的A页面做301定向到其它目录B ,则可以正常收录B页面
- 而顶级目录的A页面做302定向到其它目录B ,则收录的是A页面。
17、基重定向的文件访问控制
1、防盗链
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !localhost [NC]
RewriteRule \.(gif|jpg|png)$ - [F,NC]
2、限制访问者的IP列表
- httpd-conf中不要配置在总配置Director内部
RewriteMap hosts-deny txt:e:/hosts.deny
- e:/map1.txt 写入映射关系
192.168.1.73 deny
- 重启服务器
RewriteEngine on
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} deny [OR]
RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} deny
RewriteRule ^ - [F]
- 浏览器访问 http://192.168.1.73/测试
3、限制迅雷(多线程下载访问)迅雷输入:about://version/
RewriteCond %{HTTP_USER_AGENT} 67.0.3396.99 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} AppleWebKit [NC]
RewriteRule . aa.html
- 浏览器和迅雷访问http://192.168.1.73/1.jpg测试
17拓展
1、Ngnix伪静态配置
- 防盗链示例
location ~* \.(gifljpg|png|swflv)$ {
root html
valid_ referers none blocked *.nginx.cn;
if ($invalid referer) {
rewrite ^/ www.nginx.cn
#return 404;
}
}
2、IIS重定向配置
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WWW Redirect" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^test.com$" />
</conditions>
<action type="Redirect" url="http://www.test.com/{R:0}"
redirectType=“Permanent” />
3、Thinkphp重定向配置示例
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
伪静态配置、重定向相关文章
4 comments
老夫来了
好好学习天天向上
哔,萌新卡!上车的旅客请系好安全带!现在是:Tue Sep 03 2019 17:39:50 GMT+0800 (中国标准时间)
哔,萌新卡!上车的旅客请系好安全带!现在是:Tue Sep 03 2019 17:35:18 GMT+0800 (中国标准时间)