之前对于重定向与伪静态的配置语法有点生疏,今天抽空系统学习了一下并且写了一些例子便于理解。

本篇文章原文地址---友儿の博客

文章内容包含以下几个方面

  • 什么是伪静态?

    • 伪静态是相对真实静态来讲的,
    • 伪静态只是改变了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]

3、限制迅雷(多线程下载访问)迅雷输入:about://version/

RewriteCond %{HTTP_USER_AGENT} 67.0.3396.99 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} AppleWebKit [NC]
RewriteRule . aa.html

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]

伪静态配置、重定向相关文章

Last modification:September 4, 2019
如果觉得我的文章对你有用,请随意赞赏