Apache重载规则详解[二]

续: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] 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Google Dart

Dart 服务端开发 shelf_bind 包

shelf_bind倾向于约定优于配置,因此您可以编写必要的最小代码,但仍然可以根据需要覆盖默认值。

11320
来自专栏Java学习网

Java Web中Request对象的52个方法—即查即用

Request表示HttpServletRequest对象,它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session...

32780
来自专栏瓜大三哥

Yaffs_guts

Yaffs_guts ? 1.Chunk的读写擦除 2.文件地址映射 3.文件系统对象 1.Chunk的读写擦除 我们知道,NAND Flash的基本擦除单位是...

234100
来自专栏封碎

Java多线程参考手册 博客分类: 经典文章转载

http://blog.csdn.net/ring0hx/article/details/6858582

8020
来自专栏开源优测

[接口测试 - 基础篇] 09 其实吧,读写csv格式也是要掌握的

什么是csv格式 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表...

32550
来自专栏简书专栏

基于Python的mysql与excel互相转换

getConn函数获取mysql连接,第1个参数database为要连接的数据库。 mysql2excel函数完成主要转换功能,第1个参数database为要...

44220
来自专栏老马说编程

(59) 文件和目录操作 / 计算机程序的思维逻辑

前面两节我们介绍了如何通过流的方式读写文件内容,本节我们介绍文件元数据和目录的一些操作。 文件和目录操作最终是与操作系统和文件系统相关的,不同系统的实现是不一样...

206100
来自专栏黑泽君的专栏

用户登录注册案例(集合版)

32420
来自专栏xingoo, 一个梦想做发明家的程序员

【AngularJS】—— 2 初识AngularJs(续)

前一篇了解了AngularJS的一些简单的使用,这里继续跟着w3c学习一下剩下的内容。   本篇根据w3cschool.cc继续学习AngularJS剩余的内...

21980
来自专栏云瓣

Node.js 异步异闻录

提到 Node.js, 我们脑海就会浮现异步、非阻塞、单线程等关键词,进一步我们还会想到 buffer、模块机制、事件循环、进程、V8、libuv 等知识点。本...

43880

扫码关注云+社区

领取腾讯云代金券