Rewrite规则怎么写之Apache篇

建站经验 21NN 4个月前 (05-24) 16次浏览 已收录 0个评论 扫描二维码

经常看到很多人求助,说他的 IDC 不支持控制面板做 301 怎么办,或者说问伪静态规则怎么写,所以写这篇博文,主要本文主要讨论在 Apache 下,进行编写 Rewrite 规则。

首先,先说 URL 的重写规则怎么写。这个主要是用于做伪静态。重写规则是放在.htaccess 文件下或 Apache 的配置文件(httpd.conf 或 sites_conf 目录里的一些特定的网站配置文件),此文主要讨论.htacess 文件(其实都差不多)。

打开你的.htacess 文件,开头内容如下:

RewriteEngine on

RewriteBase /

RewriteEngine on 是代表开启 rewrite,而 RewriteBase /
是表示所有规则前都存在“/”,写了这条之后,你后面所有规则的开头,只需要写“^”就后了,但要注意的是,此规则仅在.htacess 文件中被支持,如
果是服务器配置文件,此规则会被忽略、不必写。

在正是写规则前,先为大家讲一下重写中设计到的特殊字符的含义。

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

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

?代表前面 0 或 1 个字符

^代表字符串的开始位置

$代表字符串结束的位置

。为通配符,代表任何字符

将跟在其后的字符还原为字符本身,例如“+”代表的就是“+”,而非其它意思。

^在方括号里表示非的意思。例如[^.]代表非通配符。

那么假如我们希望将“http://www.moke8.com/b.php?id=1″此类 URL 伪静态为“http://www.moke8.com/b/1″的形式,则规则如下:

RewriteRule ^b/([0-9]+)/?$/b.php?id=$1 [L]

上面的例子中,^表示域名后来的 URL 的开始,$表示字符串结束,也就是域名后面的 URL 结束。[0-9]表示一个数字,因为只要 URL 存在,其必
然存在一个 id 数字。紧接其后的+表示表示出现 1 个或多个数字。[0-9]+连在一起,表示字符以数字形式出现,数字范围为 0-9,出现次数为 1 或多
次。$表示字符串结束,?$表示在根域名后到域名结束,有 0 或 1 个字符。$1 表示存在内存中的内容,也就是说第一个圆括号中的内容。[L]表示如果规则匹
配就停止,否则需要继续运行剩下的规则,通常这个没必要深究。

那除非伪静态外,有时候我们还需要利用.htacess 进行 301 重定向。符号含义不变,举例如下:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^AAA.com$ [NC]

RewriteRule ^(.*) http://www.moke8.com/$1 [R=301,L]

上述规则是将 moke8.com 301 到 http://www.moke8.com,符号的含义相信不必再做解释了。

那么经过这两条规则,你应该有所启发了,如果你的网站做改版,导致你的 URL 结构发生了变化,怎么办?答案很简单,我们可以利用.htacess 文件,通过写 rewrite 规则,将老的 URL 301 到新的 URL 上。

RewriteRule ^(.*?)/?index.html$/$1? [L,R=301]

这个规则是将域名下搜有 a/index.html 301 到 a/ 的 URL 下。规则是死的,最重要的是大家要活学活用,相信熟练掌握 rewrite 规则后,你会发现网站所有的 URL 与返回码将会全部在你的掌控下!


乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Rewrite 规则怎么写之 Apache 篇
喜欢 (0)
[1353713598@qq.com]
分享 (0)
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址