如何设置Mod Rewrite(第2页)
重写条件
上一页中的三个示例展示了如何重写 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 变量。
- !:感叹号否定它后面的模式。 实际上,这指出无论它遵循什么 not 都属于需要受重写规则影响的条件。
- ^$:如前所述,插入符号表示字符串的开头,美元符号表示字符串的结尾。 在这种情况下,它们之间没有任何东西,因此引荐来源网址不存在。 换句话说,这行表明直接链接不受重写规则的影响。
- 第二个条件再次引用引用者。
- !^http://(www\.)?example\.com/.*$: 感叹号表示引荐来源网址不应该是我们自己的网站
最后我们来看看重写规则本身,它规定任何以扩展名 gif、jpeg 或 png 结尾的文件的链接都将被重新路由到一些令人不快的图片,以给 hotlinker 一个教训。 如果我们只是想完全禁止他们访问任何图像,我们可以对最后一行的 RewriteRule 做一个小的编辑。 您可以将重写发送到禁止页面,而不是像此行那样提供替代目的地:
RewriteRule .*\.(gif|jpeg|png)$ - [F]
示例 2:如何将 www 添加到 URL
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 地址。
- ^(12\.34\.56\.789)$:您可以使用此部分输入恶意 IP 地址。 请记住,反斜杠非常重要。 他们将句点指定为标点符号,而不是将其标准正则表达式用作通配符。
- (.*):这表示来自被阻止 IP 的任何文本都将导致重写规则完成。
- [F,L]:标志结束规则。 [F] 禁止访问,[L] 停止应用任何其他规则,使其成为最后一条规则。
资源
前面的部分是对 Mod_Rewrite 功能的基本概述。
该主题非常广泛,并且有许多细微差别,可以使它成为一个非常有用和灵活的工具。
以下是有关 Mod_Rewrite 的更多信息的一些链接: