URL rewrite,Apache伪静态规则配置 在做网站时,为了辟免一个文件有两个URL,很多时候需要用到301跳转,如这个天气预报网是将http://www.tqybw.com 301 到http://tqybw.net, .htacess文件,开头内容如下: RewriteEngine on RewriteEngineon是代表开启rewrite,而RewriteBase /是表示所有规则前都存在“/”,写了这条之后,你后面所有规则的开头,只需要写“^”就后了,但要注意的是,此规则仅在.htacess文件中被支持,如果是服务器配置文件,此规则会被忽略、不必写。 在正是写规则前,先为大家讲一下重写中设计到的特殊字符的含义。和普通正则是通用的! *代表前面0或更多个字符 +代表前面1或更多个字符 ?代表前面0或1个字符 ^代表字符串的开始位置 $代表字符串结束的位置 .为通配符,代表任何字符 \将跟在其后的字符还原为字符本身,例如“\+”代表的就是“+”,而非其它意思。 ^在方括号里表示非的意思。例如[^.]代表非通配符。 示例: RewriteRule ^([a-z]+)(|\/)$/city.php?pinyin=$1 [L] 上面的例子中,^表示域名后来的URL的开始,$表示字符串结束,也就是域名后面的URL结束。[a-z]表示一组字母,因为只要URL存在,其必然存在一个pinyin字母。紧接其后的+表示表示出现1个或多个字母亲。[a-z]+连在一起,表示字符以字母形式出现,字母范围为a-z,出现次数为1或多次。$表示字符串结束,(|\/)$表示在根域名后到域名结束,有0或1个字符。$1表示存在内存中的内容,也就是说第一个圆括号中的内容。[L]表示如果规则匹配就停止,否则需要继续运行剩下的规则,通常这个没必要深究。 那除非伪静态外,有时候我们还需要利用.htacess进行301重定向。符号含义不变,举例如下: RewriteEngine on RewriteCond %{HTTP_HOST}^www.tqybw\.net$ [NC] RewriteRule ^(.*) http://tqybw.net/$1[R=301,L] 上述规则是将www.tqybw.com 301 到tqybw.net,符号的含义相信不必再做解释了。 那么经过这两条规则,你应该有所启发了,如果你的网站做改版,导致你的URL结构发生了变化,怎么办?答案很简单,我们可以利用.htacess文件,通过写rewrite规则,将老的URL301到新的URL上。 RewriteRule ^(.*?)/?index\.html$/$1?[L,R=301] 这个规则是将域名下搜有a/index.html 301 到 a/的URL下。规则是死的,最重要的是大家要活学活用,相信熟练掌握rewrite规则后,你会发现网站所有的URL与返回码将会全部在你的掌控下! 在nginx下规则类似! 前一篇: Linux各种进程状态解析 后一篇: EditPlus配置PHP代码调试 |