1、先写个简单的重载规则(具体环境配置参考 http://www.0377joyous.com/archives/109.html) 2、在网站目录(我在网站根目录下做测试)下建立htaccess文件 内容如下: <IfModule mod_rewrite.c> RewriteEngine on RewriteRule list_([0-9]{1,})\.html$ list.php?cid=$1 </IfModule> 3、在同目录下建立一个list.php文件 内容如下: <?php echo “伪静态正常访问:”.$_GET[‘cid’]; ?> 4、然后在地址栏输入http://localhost/list_23.html(看能否有如下结果) 伪静态正常访问:23 5、这个显示说明你的伪静态配置也就是重载rewrite模块加载正确 下面开始进行规则学习(其实就是正则表达的学习)
用实际的案例来进行深入的学习
介绍之前先补充点基础知识: 其中Apache模块 mod_rewrite有以下指令(更多内容参考:http://www.apache.org/) RewriteBase 指令 语法:RewriteBase URL-path 作用域:directory, .htaccess 可以理解为作用路径(本人看法)
RewriteCond 指令 语法:RewriteCond TestString CondPattern 作用域:server config, virtual host, directory, .htaccess 可以理解为什么时候发生重载(其中这里的知识包含有$n(0-9)以及%n(1-9)以及rewritemap、环境变量) RewriteEngine 指令 语法:RewriteEngine on|off 作用域:server config, virtual host, directory, .htaccess 可以理解为重载开关
RewriteLock 指令 RewriteLog 指令 RewriteLogLevel 指令 RewriteMap 指令 RewriteOptions 指令
RewriteRule 指令 语法:RewriteRule Pattern Substitution 作用域:server config, virtual host, directory, .htaccess
要求1: 原来地址栏显示格式是: http://www.0377joyous.com/search.php?cid=23&name=城市&diqu=河南(其中汉字需要url编码) 重载过后显示: http://www.0377joyous.com/search_23_城市_河南.html(也就是三个参数用_隔开) 那么htaccess文件匹配规则可以这样写 RewriteRule search_([0-9]{1,})_(.*)_(.*)\.html$ search.php?cid=$0&name=$1&diqu=$2
详解: 既然需要三个参数那么就需要三个原子可以这样写:search_(.*)_(.*)_(.*)\.html$ 其中一个()表示一个原子,在后面可以用$n(其中n可以用0-9表示)获取匹配到的原子 其中.*表示匹配所有,后面那个\.html其中“\”是转义那个点用的,而$这个符号表示匹配结束符 (这个明白了吧?具体的正则知识可参见http://www.0377joyous.com/archives/520.html)