如何设置 Mod_Rewrite(第 2 页)
接第 1 页
重写条件
上一页的三个示例展示了如何重写 URL 以使网站更易于访问和记忆。
重写规则还可以有条件,以确保重写仅在特定情况下发生。
示例 1:如何防止热链接
热链接是将一个服务器上的图像或对象用于另一个服务器的过程。此操作会耗尽受害者服务器的带宽,并使对象的创建者无法再吸引其他访问者访问其网站。
您可以通过将网站上某个对象的所有链接重定向到其他不太令人愉快的图像,或完全禁止该操作来防止热链接。
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/.*$ [NC] RewriteRule .*\.(gif|jpeg|png)$ http://www.example.com/unpleasantness.jpg [R,NC,L]
现在解释一下:
- %{HTTP_REFERER}:这指的是流量来自哪里。百分号表示这是一个 apache 变量。
- !:感叹号否定了其后的模式。实际上,这表明其后的任何内容均不符合受重写规则影响的条件。
- ^$:如前所述,插入符号代表字符串的开头,美元符号代表字符串的结尾。在这种情况下,它们之间没有任何内容,因此引荐来源不存在。换句话说,此行表明直接链接不受重写规则的影响。
- 第二个条件再次引用了引荐来源。
- !^http://(www\.)?example\.com/.*$:感叹号表示引荐来源不应是我们自己的网站
- 最后我们来看看重写规则本身,它规定任何以 gif、jpeg 或 png 为扩展名的文件的链接都将被重定向到一些令人不快的图片,以给热链接者一个教训。如果我们只是想禁止他们访问任何图像,我们可以对最后一行的 RewriteRule 进行一点小修改。您可以直接将重写发送到被禁止的页面,而不是像这一行那样提供替代目的地:
RewriteRule .*\.(gif|jpeg|png)$ - [F]
示例 2:如何在 URL 中添加 www
mod_rewrite 的另一个有用技巧是将 www 添加到域名。尽管人们很容易看出 example.com 和 www.example.com 是同一个网站,但搜索引擎会将它们视为重复网站,从而损害其排名。
要解决此问题,您可以选择始终删除 www 或始终将其添加到 URL。此示例将展示如何确保始终附加 www。
RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]
现在解释一下:
- %{HTTP_HOST}:这指的是请求的 URL 中的网站
- ^example.com$:说明请求的页面需要是 example.com
- ^(.*)$:重写规则规定,后面的任何文本都可以跟在域后面。
- [R=301]:该标志表示 URL 正在重定向,301 表示这是永久重定向。临时重定向用数字 302 表示。
所有内容将从 example.com 转换为 www.example.com
示例 3:阻止特定 IP 地址
这是一个有用的工具,例如可以防止特定 IP 地址的恶意人士访问网站。
RewriteCond %{REMOTE_ADDR} ^(12\.34\.56\.789)$ RewriteRule (.*) - [F,L]
现在解释一下:
- %{REMOTE_ADDR}:代表访问我们网站的 IP 地址以及我们想要阻止的 IP 地址。
- ^(12\.34\.56\.789)$:您可以使用此部分输入恶意 IP 地址。请记住,反斜杠非常重要。它们将句号指定为标点符号,而不是将其作为标准正则表达式通配符使用。
- (.*):这表示来自被阻止 IP 的任何文本都将导致重写规则完成。
- [F,L]:标志结束规则。[F] 禁止访问,[L] 阻止任何其他规则应用,使其成为最后一条规则。
资源
前面的部分是对 Mod_Rewrite 功能的基本概述。
这个主题相当广泛,并且有许多细微差别,可以使其成为一个非常有用且灵活的工具。
以下是有关 Mod_Rewrite 的更多信息的链接:
作者:Etel Sverdlov