前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache重载规则详解[二]

Apache重载规则详解[二]

作者头像
苦咖啡
发布2018-05-07 17:27:32
1.1K0
发布2018-05-07 17:27:32
举报
文章被收录于专栏:我的博客我的博客

续:Apache重载规则详解[一]

要求2: 很多模板技术mvc中总有index.php(显示在地址栏,看着很不友好,这个怎么重载?) 比如: http://www.0377joyous.com/index.php/list/23/ 重载过后显示 http://www.0377joyous.com/list/23/更利于搜索引擎收录

规则可以这样写(这个是TP上的规则)

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

分析下这个例子 简单的说 RewriteCond %{REQUEST_FILENAME} !-d#检查是否是目录

RewriteCond %{REQUEST_FILENAME} !-f#检查是否是文件

具体介绍: RewriteCond指令格式 语法: RewriteCond TestString CondPattern [flags] RewriteCond指令定义一条规则条件。在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当自身的 模板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理。 1、 TestString是一个纯文本的字符串,除了包含普通的字符外,还可以包括下列的可扩展结构: 1)$N:RewriteRule后向引用,其中(0 <= N <= 9) 。$N引用紧跟在RewriteCond后面的RewriteRule中模板中的括号中的 模板在当前URL中匹配的数据。 2)%N:RewriteCond后向引用,其中(0 <= N <= 9) 。%N引用最后一个RewriteCond的模板中的括号中的模板在当前URL中 匹配的数据。 3)${mapname:key|default}:RewriteMap扩展。 2、CondPattern是条件pattern, 即一个应用于当前实例TestString的正则表达式, 即TestString将会被计算然后与 CondPattern匹配。作为一个标准的扩展正则式,CondPattern有以下补充: 1)可以在模板串前增加一个!前缀,以用表示不匹配模板。但并不是所有的test都可以加!前缀。 2)CondPattern中可以使用以下特殊变量: ‘ ‘>CondPattern’ (大于) 将condPattern当作一个普通字符串,将它和TestString进行比较,当TestString 的字符大于 CondPattern为真。 ‘=CondPattern’ (等于) 将condPattern当作一个普通字符串,将它和TestString进行比较,当TestString 与 CondPattern完全相同时为真.如果CondPattern只是 “” (两个引号紧挨在一起) 此时需TestString 为空字符串方为真 。 ‘-d’ (是否为目录) 将testString当作一个目录名,检查它是否存在以及是否是一个目录。 ‘-f’ (是否是regular file) 将testString当作一个文件名,检查它是否存在以及是否是一个regular文件。 ‘-s’ (是否为长度不为0的regular文件) 将testString当作一个文件名,检查它是否存在以及是否是一个长度大于0的 regular文件。 ‘-l’ (是否为symbolic link) 将testString当作一个文件名,检查它是否存在以及是否是一个 symbolic link。 ‘-F’ (通过subrequest来检查某文件是否可访问) 检查TestString是否是一个合法的文件,而且通过服务器范围内的当 前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性 能。 ‘-U’ (通过subrequest来检查某个URL是否存在) 检查TestString是否是一个合法的URL,而且通过服务器范围内的当前 设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能 。 3、[flags]是第三个参数,多个标志之间用逗号分隔。 1)’nocase|NC’ (不区分大小写)   在扩展后的TestString和CondPattern中,比较时不区分文本的大小写。注意, 这个标志对文件系统和subrequest检查没有影响. 2)’ornext|OR’ (建立与下一个条件的或的关系)   默认的情况下,二个条件之间是AND的关系,用这个标志将关系 改为OR。例如: RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule … 如果没有[OR]标志,需要写三个条件/规则.

第二部分: RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 前面部分第二部分是正则表达,那几个字母含义在这里 【参数详解】 1) R 强制外部重定向,后面可以代301或302跳转。 2) F 禁用URL,返回403HTTP状态码。 3) G 强制URL为GONE,返回410HTTP状态码。 4) P 强制使用代理转发。 5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。 6) N 重新从第一条规则开始运行重写过程。 7) C 与下一条规则关联。 8) T=MIME-type(force MIME type) 强制MIME类型。 9) NS 只用于不是内部子请求。 10) NC 不区分大小写。 11) QSA 追加请求字符串。 12) NE 不在输出转义特殊字符。

参考文献:

http://blog.csdn.net/keyunq/article/details/2536875

http://blog.163.com/alex_kame/blog/static/1454674820109145376166/

http://www.cnblogs.com/yeer/archive/2010/08/17/1801679.html

http://www.lc365.net/blog/b/14827/

要求3:

隐藏扩展名,比如原来访问用list.php?cid=2如果隐藏扩展名那么就成了list?cid=2

RewriteRule ^/?([a-z]+)$ $1.php [L]

如果连接有html扩展的也有php的,那可以这样写

RewriteRule ^/?([a-zA-Z0-9]+)$ $1.php [L]  RewriteCond %{REQUEST_FILENAME}.html -f  RewriteRule ^/?([a-zA-Z0-9]+)$ $1.html [L] 

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012年5月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档