http://www.mangguo.org/10-mod_rewrite-rule-you-should-know/

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://www.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://www.mangguo.org/home.html?example=12345abcd 这些地址格式都不是很漂亮,更重要的是,搜索引擎会显示一堆重复地址的网页。如果想摆脱 URL 地址中的查询字符串,请使用以下代码: RewriteCond %{QUERY_STRING} example= RewriteRule (.) http://www.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} ^www.mangguo.org$ [NC,OR] RewriteCond %{HTTP_HOST} ^mangguo.org$ [NC,OR] RewriteCond %{HTTP_HOST} ^www.mangguo.org$ [NC] RewriteRule ^(.)$ http://mangguo.org/$1 [R=301,L] 谨记文件系统的优先性 服务器上的文件系统始终优先于 URL 地址重写。比如有一个名为 “services” 的文件目录,存放一个名为 “design.html” 的文件。则无法将该 URL 重定向至 “http://www.mangguo.org/services",因为 Apache 忽略重写代码直接转向 “services” 目录。要解决此问题,只需重命名目录即可。 英文原稿:10+ Mod_Rewrite Rules You Should Know | Noupe 翻译整理:10 个你应该知道的 mod_rewrite 规则 | 芒果