芒果小站

  1. 全球最具业界良心的主机 - DigitalOcean

    毫无疑问,目前做得最好的主机供应商

    猛击这里查看

  2. 芒果小站目前使用的主机 - DigitalOcean

    客服响应快,随时退款,XEN 架构稳定

    猛击这里查看

  3. 最好的日本东京线路主机 - DigitalOcean

    可选弗里蒙特、达拉斯、亚特兰大、纽瓦克、伦敦、东京机房

    猛击这里查看

  • 1
  • 2
  • 3
切换到精简模式
7

10 个你应该知道的 mod_rewrite 规则

作者 芒果/分类 代码/发布于 2009-08-20 11:32

Mod_rewrite 是一个基于 Apache 服务器的动态 URL 重写引擎。Apache 服务器已本地集成了该模块,但默认情况下不启用。

它能够超越简单的重写功能,以下其中的一些实用技巧。

开启 Mod_Rewrite 模块
Mod_rewrite 模块通过 .htaccess 文件使用。粘贴以下代码至 .htaccess 文件头部,以开启 mod_rewrite 模块:

RewriteEngine on

谨记,.htaccess 文件命令是区分大小写的。要使用 mod_rewrite 模块,此代码必须在 .htaccess 文件的开头输入。

基本 Mod_Rewrite 布局
mod_rewrite 命令的基本格式为:

RewriteRule Pattern Substitution [Flag(s)]

URL 地址是相对的
您所要重定向的 URL 地址是相对于当前 .htaccess 所在目录而言的。因此如果 .htaccess 存放于根目录,URL 地址均涉及并相对于根目录;如果 .htaccess 存放于子目录,URL 地址涉及并相对于特定的子目录。

基本重定向
如果只是想创建简单的从一个 URL 地址到另一个 URL 地址的 301 重定向,可以使用以下代码:

RewriteRule ^fileone.html$ filetwo.html

这是一个非常基本的规则,意味着任何来自 fileone.html 的请求将被引导至 filetwo.html 文件。
关于 301 重定向请详细参考:使用 .htaccess 实现 301 域名重定向

省略 “www” 前缀
这段代码将允许访客不需要输入 “www” 前缀即可正确访问网站。

RewriteCond %{HTTP_HOST} !^mangguo\.org$ [NC]
RewriteRule ^(.*)$ http://mangguo.org/$1 [R=301,L]

阻止特定的 IP 地址
如果想阻止来自特定 IP 地址访问你的网站,可以使用以下代码:

RewriteCond %{REMOTE_ADDR} ^(A\.B\.C\.D)$
RewriteRule ^/* http://mangguo.org/sorry.html [L]

阻止特定的 User Agent
如果想阻止一组来自相同 User Agent 的 IP 地址段,可使用以下代码:

RewriteCond %{HTTP_USER_AGENT} UserAgent
RewriteRule .* - [F,L]

通过修改 User Agent 参数内容,可以轻易阻止任何 User Agent 的访问。如果要同时阻止一个以上,则代码如下:

RewriteCond %{HTTP_USER_AGENT} UserAgentA [OR]
RewriteCond %{HTTP_USER_AGENT} UserAgentB

你可以根据需要添加更多 User Agent 字段,确保每一行换行处使用 [OR] 来标示。

去除查询字符串
比方说,网站上除首页以外的其他网页 URL 地址格式如下,以查询字符串区分:
http://mangguo.org/home.html?example=12345abcd
这些地址格式都不是很漂亮,更重要的是,搜索引擎会显示一堆重复地址的网页。如果想摆脱 URL 地址中的查询字符串,请使用以下代码:

RewriteCond %{QUERY_STRING} example=
RewriteRule (.*) http://mangguo.org/$1? [R=301]

这不仅摆脱了查询字符串,而且去除了前面的问号。

预设图片
一旦无法找到图片,使用默认的预设图片替换,以防止出现丑陋的红叉,使网站显得更加专业。代码如下:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^images/.*\.jpg$ /images/default.jpg [L]

当然,也可以改变采用其他图片格式。保证你有一个实际存在的 “default.jpg” 或其他名称的预设图片。

防止盗链
被其他网站盗取内容或图片,是网站所有者最苦恼的事情。而且图片盗链浪费了大量的服务器带宽资源。下面是一段阻止盗链的简单代码:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mangguo.org/ .*$ [NC]
RewriteRule \.(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

请务必改变将 “mangguo.org” 更换为你自己的域名。

重定向到维护页
如果需要维修网站并使站点下线,可以将整个网站重定向至维护页面(或其他页面),代码如下:

RedirectMatch 302 ^/ /maintenancepage.html

请将 maintenancepage.html 更换为所需网页名称。

重定向多个域名至单一域名
如果你有多个域名指向你的网站,很可能会在搜索引擎中出现重复内容。使用以下代码将多个域名重定向至单一域名:

RewriteCond %{HTTP_HOST} ^mangguo.org$ [NC,OR]
RewriteCond %{HTTP_HOST} ^mangguo.org$ [NC,OR]
RewriteCond %{HTTP_HOST} ^mangguo.org$ [NC]
RewriteRule ^(.*)$ http://mangguo.org/$1 [R=301,L]

谨记文件系统的优先性
服务器上的文件系统始终优先于 URL 地址重写。比如有一个名为 “services” 的文件目录,存放一个名为 “design.html” 的文件。则无法将该 URL 重定向至 “http://mangguo.org/services”,因为 Apache 忽略重写代码直接转向 “services” 目录。要解决此问题,只需重命名目录即可。

英文原稿:10+ Mod_Rewrite Rules You Should Know | Noupe
翻译整理:10 个你应该知道的 mod_rewrite 规则 | 芒果

版权所有,转载请注明出处。
转载自 <a href="http://mangguo.org/10-mod_rewrite-rule-you-should-know/" title="10 个你应该知道的 mod_rewrite 规则" rel="bookmark">10 个你应该知道的 mod_rewrite 规则 | 芒果小站</a>
如果喜欢这篇文章,欢迎订阅芒果小站以获得最新内容。

已经有 7 条群众意见

  1. 老饕 /2009-08-20 15:25

    这个很专业的! 回应

    #1
  2. 万戈 /2009-08-20 16:32

    用过其中一两招。 回应

    #2
  3. kaysnoopy /2009-08-20 20:40

    太专业了。。URL 高级优化可以用到哦。 回应

    #3
  4. 卢松松 /2009-08-20 21:50

    我全部都在 windows 平台下工作的! 回应

    #4
  5. hiro /2009-08-21 12:57

    在 Noupe 上看到了,没想到你翻译了发表出来。 回应

    #5
  6. 购物返现金 /2009-08-21 15:52

    这个我的 %E 回应

    #6
  7. ?
    Mod_rewrite在wordpress中的一些技巧 — YESURE技术博客 /2010-10-24 14:27

    […] 原文链接:http://mangguo.org/10-mod_rewrite-rule-you-should-know/ […] 回应

    #7

下面我简单说几句