- .htaccess
.htaccess叫分布式配置文件,.htaccess文件的作用在于当浏览器通过uri访问到服务器某个文件夹或文件时,我们可以决定这个uri是否访问uri指定资源或者拒绝访问。
- 重写配置开启
- 让服务器加载rewrite.so模块
- 配置vhost站点时候,将此参数AllowOverride配置成all.
AllowOverride all
- 在项目根目下必须有.htaccess文件
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] </IfModule>
- 重写和重定向区别
- 重写是同域名下改写访问路径,重定向是不同域名之间
- 重写是服务器端改写路径,不返回到浏览器。重定向需要返回给浏览器,让浏览器访问。
- 重写对SEO优化没有效果,重定向有。
- 基本语法介绍
【说明 】定义重写发生的条件 【语法】 RewriteCond 【TestString】 【CondPattern】 [flags] 【作用域】 server config, virtual host, directory, .htaccess 【覆盖项】 FileInfo 【状态】 扩展(E) 【模块】 mod_rewrite
- CondPattern基本是正则匹配,正则匹配时候"!"感叹号表示否定含义。
- 纯字母对比
2.1>(词典顺序的小于) ‘<CondPattern’ 将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString小于CondPattern则为真。 2.2>(词典顺序的大于) ‘>CondPattern’ 将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString大于CondPattern则为真。 2.3>(词典顺序的等于) ‘=CondPattern’ 将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString等于CondPattern(两个字符串逐个字符地完全相等)则为真。 2.4>(为空判断) "" 如果CondPattern是”"(两个双引号),则TestString将与空字符串进行比较。
3.目录文件的测试
3.1> ‘-d’(目录) 将TestString视为一个路径名并测试它是否为一个存在的目录。 3.2> ‘-f’(常规文件) 将TestString视为一个路径名并测试它是否为一个存在的常规文件。 3.3> ‘-s’(非空的常规文件) 将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。 3.4> ‘-l’(符号连接) 将TestString视为一个路径名并测试它是否为一个存在的符号连接。 3.5> ‘-x’(可执行) 将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。 3.6> ‘-F’(对子请求存在的文件) 检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用! 3.7> ‘-U’(对子请求存在的URL) 检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
[flags] 语句 含义 R 强制外部重定向;R=301 永久重定向、R=302 临时重定向 F 禁止URL,返回403 http状态码 G 强制URL为GONE,返回410 http状态码 P 强制使用代理转发 L 表明当前规则是最后一条规则,停止分析以后的规则重写 N 重新从第一条规则开始运行重写过程 C 与下一条规则关联 T=MIME-type(force MIME type) 强制MIME类型 NS 只是用于不是内部的子请求 NC 不区分大小写 QSA 追加请求字符串 NE 不再输出转义特殊字符 %3d$1 等价于 =$1
TestString是一个纯文本的字符串,但是还可以包含下列可扩展的成分: 1、RewriteRule反向引用 ,引用方法是:$N (0 <= N <= 9)引用当前(带有若干RewriteRule指令的)RewriteCond中的与Pattern匹配的分组成分(圆括号!)。 2、RewriteCond反向引用 ,引用方法是:%N (1 <= N <= 9)引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)。 3、RewriteMap扩展 ,引用方法是:${mapname:key|default} 细节请参见RewriteMap 指令。
- 环境变量
- 暂时
- 参考
《.htaccess 基础教程(四)Apache RewriteCond 规则参数》 http://www.cnblogs.com/52php/p/5670199.html