本文链接:https://blog.csdn.net/github_26672553/article/details/56289267
什么是伪静态和重定向
伪静态
是相对真静态来讲的。伪静态只是改变了URL的表现形式,实际上还是动态页面。伪静态有了真静态一样的SEO。 重定向
是通过各种方法将各种网络请求重新定个方式转到其他位置。
HTTP标准协议中的3xx (主要是302,303)
Apache环境
#重定向模块linux平台的配置安装LoadModule rewrite_module modules/mod_rewrite.so
重定向既可以在apche的主配置文件中设置,也可以在.htaccess文件中设置。
区别:修改.htaccess不需要重启apache。
注意:使用.htaccess文件,需要给其设置权限
#在apache主配置中
AllowOverride None修改为:
AllowOverride All
重定向第一个例子
RewriteEngine OnRewriteRule ^(.*).htm$ $1.html#访问.htm文件,会被替换成.html
重定向的原理和基本方法
1..htaccess
的工作原理
.htaccess文件(或者『分布式配置文件』)提供了针对每个目录改变配置的方法,即在一个特定的目录中,放置一个包含指令的文件,其中的指令用于此目录及其所有子目录。
2.Apache重定向原理
基于Apache重定向基础知识
1.mod_rewrite简介
Apache的URL操作模块
包含:RewriteBase、RewriteRule、RewriteCond、RewriteMap
2.rewrite日志功能
在做很多调试或者排查错误的时候,最佳工具一定是它的日志。
在这里,如果你的重定向发生了错误(比如死循环),你就可以通过日志来快速定位问题。
apache2.2版本的 RewriteLog RewriteLogLevel (0关闭 9dbug)
apache2.4以上版本的 LogLevel
LogLevel操作示范
#要求:只能在apache主配置文件中,不能在.htaccess文件里配置LogLevel alert rewrite:trace8#日志最后是记录到apache_error.log文件里#1-8,生产模式不要大于trace2(或者不记录日志)
3.RewritRule语法说明
RewriteRule 模式匹配 替换的URL [flags]
模式匹配,支持Perl格式的正则表达式和rewrite的变量。
替换的URL,支持模式匹配的结果和rewrite变量。
多个flag用逗号隔开 [R=302,C]
4.RewriteRule R flag说明
强制外部重定向,后面可以加301或302跳转,不加默认的302
RewriteRule ^/?(.*).html /src/$1.php [R=302]
5.RewriteRule C flag说明
链接下一规则
RewriteRule ^/?(.*).html /src/$1.htm [C]RewriteRule ^/?(.*).html /src/$1.php
如果前一条规则不匹配,就不进入下一个规则验证了。
6.RewriteRule L flag说明
结尾规则,一旦匹配就立即停止重写操作,并不在应用其他重写规则
RewriteEngine OnRewriteRule ^(.*) first.php?url=$1 [L]RewriteRule ^(.*) second.php?url=$1
7.RewriteRule NE flag说明
不对URL中的特殊字符进行hexcode转码
RewriteEngine OnRewriteRule ^(.*).htm /index.html#$1 [R,NE]
如果不写 NE, #
符号在地址栏会被转义为%23
RewriteRule ^(.*).htm /index.html#$1 [R]
8.RewriteRule NC flag说明
不区分大小写
RewriteRule ^test/(.*).htl /tmp/$1.htm [NC]
9.RewriteRule G flag说明
请求的网页已经失效(Gone)
RewriteRule ^oldulr.*$ - [G]
Apache服务器会返回410
10.RewriteRule QSA flag说明
用于在URI中截取查询字符串
RewriteRule ^per/(.*)$ /per.php?person_id=$1 [QSA,R]
11.RewriteBase 语法说明
设置了目录级重写的基准URL
RewriteEngine OnRewriteBase /testRewriteRule ^(.*).htm$ $1.html [R]
这样访问localhost/test.htm,就会跳转到 /test/test.html
12.RewriteCond 语法说明
RewriteCond指令定义了一个规则的条,即在一个RewriteRule指令之前有一个或多个RewriteCond指令。
RewriteEngine onRewriteCond $1 "test"RewriteRule ^(.*).htm $1.html
满足条件localhost/test.htm ,才能批到到 test.html