.htaccess文件玩转Rewrite,后来想换成 http


刚玩网页的时候,写的都是静态页 http://linuxboy.net/about.htm 这样的结构。


后来想换成 http://linuxboy.net/about/


但是又因为不熟悉rewrite,做了如下的调整,手动建立了一堆的文件夹:

这样的目录结构,维护起来相当麻烦。每次新加一个页面,都要开一个文件夹。


其实采用左边那套结构部署上去,服务器稍做设置,就可以支持我们想要的URL效果。

如何玩 rewrite

首先看看自己的服务器是否支持 .htAccess


如果支持这货,就不用每次写条规则就重启一次服务器了,便于测试。

redirect 301 /test.htm http://linuxboy.net/

成功的话,当你访问 xxx.com/test.htm 的时候,会自动跳到我的博客。


不成功的话,需要开启一下 .htaccess :

打开 confhttpd.conf ,查找#LoadModule rewrite_module,将#号去掉,加载该模块

打开 confextrahttpd-vhosts.conf ,查找 AllowOverrideNone,将 None 变更为 All

环境准备完成后,还需要对“模式匹配”中特殊字符在rewrite的解读做一下了解:

* 代表前面0或更多个字符


+ 代表前面1或更多个字符


? 代表前面0或1个字符


^ 代表字符串的开始位置


^ 在方括号里代表“非”,例如[^/]代表非斜杠。


$ 代表字符串结束的位置


. 代表任何字符(也就是通配符)


取消后面字符的特殊意思,转为原义字符。


—— 这部分的理解出自《SEO艺术》第六章末


开始干吧,打开.htaccess的rewrite


RewriteEngine on

把 xxx.htm 文件 替换为 xxx/


RewriteRule ^(.*)/$ /$1.htm [L]

再给一个例子加深理解,这是将服务器上的 xxx.PHP文件 替换成 xxx.html


RewriteRule ^(.*).html$ /$1.php [L]


更多用法:

让所有访问 www.linuxboy.net/xxx/ 的用户 跳转到 linuxboy.net/xxx/


RewriteCond %{HTTP_HOST} ^www.linuxboy.net [NC]


RewriteRule ^(.*)$ http://linuxboy.net/$1 [L,R=301]

对指定目录开启转向的代码:


RewriteBase /top/

带搜索参数的转向:


RewriteRule ^search/(.+)?$ /index.php?s=$1 [QSA,L]

目录末尾补斜线:


RewriteRule ^(.+[^/])$ /$1/ [R]

相关内容

    暂无相关文章