mod_rewrite

mod_rewrite

mod_rewrite模块包括很多工作,其中SEO人员最常用的就是在网站编辑时声明规则,被Apache实时地将访问者请求的静态URL地址映射为动态查询字符串,并发送给不同的PHP脚本处理。从搜索引擎蜘蛛的角度看来,这些URL地址是静态的。就是平时我们说的动态网站静态化。

这个模块在服务器上 (httpd.conf),虚拟主机上 (<VirtualHost> 指令块),目录上 (.htaccess 文件和 <Directory> 指令块) 对完整的 URL (包含目录信息部分和查询字符串部分) 操作。 重写结果可以导致新的规则处理,内部的后续处理,外部请求重定向,甚至透过内部代理, 这取决于你为规则附加的标志

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Satisfy all
</Directory>

AllowOverride None改为AllowOverride All

开启 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” 目录。要解决此问题,只需重命名目录即可。

Apache mod_rewrite规则重写的标志一览


1) R[=code](force redirect) 强制外部重定向
   强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。
2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。
3) G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。
4) P(force proxy) 强制使用代理转发。
5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N(next round) 重新从第一条规则开始运行重写过程。
7) C(chained with next rule) 与下一条规则关联
   如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。
8) T=MIME-type(force MIME type) 强制MIME类型
9) NS (used only if no internal sub-request) 只用于不是内部子请求
10) NC(no case) 不区分大小写
11) QSA(query string append) 追加请求字符串
12) NE(no URI escaping of output) 不在输出转义特殊字符
    例如:RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zed
13) PT(pass through to next handler) 传递给下一个处理
    例如:
       RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理
       Alias /def /ghi 
14) S=num(skip next rule(s)) 跳过num条规则
15) E=VAR:VAL(set environment variable) 设置环境变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值