Chinaunix首页 | 论坛 | 博客
  • 博客访问: 264179
  • 博文数量: 10
  • 博客积分: 256
  • 博客等级: 二等列兵
  • 技术积分: 737
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-23 19:28
文章分类

全部博文(10)

文章存档

2016年(2)

2015年(2)

2014年(2)

2013年(3)

2012年(1)

分类: 服务器与存储

2015-05-13 11:11:11

1、本地APACHE器.htaccess 配置
    (1)apache允许地址重写
            Options FollowSymLinks
            AllowOverride None
        改为
            Options FollowSymLinks
            AllowOverride All

    (2)去掉下面模块的注释
        LoadModule rewrite_module modules/mod_rewrite.so
----------------------------------------------------功能----------------------------------------------------
1、防盗链功能
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]
    RewriteCond %{HTTP_REFERER} !^$
    RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
    逐行讲解一下:
    1.打开Rewrite功能。有可能服务器设置里已经是全局下打开了,但是多写也没事。
    2.RewriteCond指令,定义生效条件,用于寻找匹配条件的地址。后面内容用正则表达式匹配。代表含义是发送的请求不由mysite.com而来,那就是盗链啦。末尾的[NC]代表忽略大小写。
    3.发送请求的主机前缀不为空。
    4.RewriteRule指令,定义重写规则,把匹配的地址按此规则重写。本例中把这些后缀为这些图片格式的,都替换到某一个图片下。[L]表示这是最后一段规则。
    只这四行就实现了防盗链是不是很神奇(- -||),编写起来是不是又觉得复杂。
    这里总结了几个常用参数(不是全部):
    RewriteCond下:
    [NC] 不分字母大小写
    [OR] 用于连接下一条规则

    RewriteRule下:
    [R] 强制重定向,[R=code] code默认为302
    [F] 禁用URL,返回HTTP 403 错误
    [L] 这是最后一条规则,之后内容无用
    还有一篇关于正则表达式的教程(很详细):
    
2、文件保护
    可以利用「.htaccess」来批量处理。
        Options -Indexes    
    当然该语法还有其他相关的用途,以下列出简单的几项供大家参考使用,如果你觉得以下的语法不是你想要或是想学更多,你可以到Apache官方网站来看看英文说明书,查看看还有什么关于「indexoptions」的用途或是其他不错的功能喔!
        Options +Indexes:显示目录下所有文件
        Options -Indexes:隐藏目录下所有文件 (上面已经介绍过)
        IndexOptions +FancyIndexing:显示目录下所有文件,文件前面包含档案类型的小图示
        IndexOptions -FancyIndexing : 显示目录下所有文件,但不包含文件类型的小图示
        IndexIgnore *.php *.exe:隐藏特定的文件, 其余文件正常显示(隐藏所有的php和exe文件)
        
3、 自定义错误页面(较少用,一般程序里会添加同风格的错误页面)
    ErrorDocument 404 /404.php
    ErrorDocument 500 /500.php
    ErrorDocument 400 /400.php
    ErrorDocument 401 /401.php
    ErrorDocument 403 /403.php
    ErrorDocument 503 /503.php    
    
    当你的网站在升级、修改的时候,你最好让访客转到指定的页面,而不是没做完的页面或者是错误页。
    这时我们做一个302转跳就好。
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !/maintenance.html$
    RewriteCond %{REMOTE_ADDR} !^123.123.123.123
    RewriteRule $ /error.html [R=302,L]
    1.继续打开Rewrite功能。- -|
    2.REQUEST_URI,请求的URL值。这里指所有访问maintenance.html页面的请求。
    3.REMOTE_ADDR,向服务器发送请求的IP地址。本例中此处应设为你自己的IP,这样就只有你能访问。
    4.RewriteRule指令。本例中把这些请求都重定向到了error.html 。
    在本例,我们总结几个常用的正则表达式和特殊符号。
    (.*) 用于匹配某一区域内所有内容。如 abc/def/ghi 可用 (.*)/(.*)/(.*) 匹配。
    ([a-zA-Z_]+) 匹配英文单词,允许用-和_连接。
    ([0-9]+) 匹配多位数字,通常用于匹配ID。
    ([0-9]) 只匹配一位的数字。
    ^ 表示正则的开始
    $ 表示正则的结束
    
4、网址规范化
    Options +FollowSymLinks
    rewriteEngine on
    rewriteCond %{http_host} ^yourdomain.com [NC]
    rewriteRule ^(.*)$ [R=301,L]
    这个是把所有二级域名都重定向到的例子,现在看来是不是很简单了?
    需要注意的是,这里的Options +FollowSymLinks不是必须的,但在某些服务器如果不设置FollowSymLinks,可能引起500错误。
再来看一个好玩的重定向
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_USER_AGENT} (Googlebot)
    RewriteRule ^ [R=301,L]
    1.打开Rewrite功能。
    2.RewriteBase指令,设置目录级重写的基准URL。可以理解成把该目录(这个.htaccess所在目录)假定为基准的URL前缀。本例中这样的写法无用。
    3.RewriteCond指令。匹配所有USER_AGENT为Googlebot的发送请求。
    4.RewriteRule指令。本例中把这些请求都重定向到了abc.com。
    在本例中,这个配置应该是黑客所为,把google蜘蛛指向某个网站,等于伪造PR。


5、重定向RSS地址到Feedburner
    除了可以更改模板里的RSS地址外,.htaccess也能实现RSS地址的更改,并更加方便。
    RewriteEngine on
    RewriteCond %{HTTP_USER_AGENT} !FeedBurner    [NC]
    RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
    RewriteRule ^feed/?([_0-9a-z-]+)?/?$ [R=302,NC,L]
    有了上面的总结,本例其实就很简单了吧。
    唯一要注意的是这样操作要确保填写正确的HTTP_USER_AGENT。其实你不常换模板的话。。可能还是直接改模板更省事。
    在最后,为懒虫们推荐几个好东东:
    在线.htaccess生成器:htaccessEditor
    在线正则表达式检查器:
    mod_rewrite模块中文参考手册:
    P.S. 其实我以为rewrite也只是APACHE一个模块而已,做到边查边写足矣,实在不行直接去搜一个规则也未尝不可。没有必要费太大力气去学。不过其中的正则表达式还是非常实用的,值得深入学习。
原文链接:

----------------------------------------------------其他实例解释----------------------------------------------------

RewriteCond %{REQUEST_FILENAME} !-f   //如果文件存在,就直接访问文件,不进行下面的RewriteRule.(不是文件或文件不存在就执行重写)  
RewriteCond %{REQUEST_FILENAME} !-d   //#如果目录存在就直接访问目录不进行RewriteRule  
RewriteCond %{REQUEST_URI} !^.*(.css|.js|.gif|.png|.jpg|.jpeg)$ //#如果是这些后缀的文件,就直接访问文件,不进行Rewrite

Apache mod_rewrite模块处理query strings 时会有些让人困惑. 以下是RewriteRule的官方文档说明:

让我们尝试通过query string来跳转页面. 我们的重写规则如下:
    view plaincopy to clipboardprint?
    RewriteCond %{QUERY_STRING} ^id=([0-9]*)$  
    RewriteRule ^page\.php$ %1.php [R=302,L]  
根据官方文档, 输出似乎应该是这样的:
    view plaincopy to clipboardprint?
    /page.php?id=37 -TO- 37.php  
    /page.php?id=40 -TO- 40.php  
    # and so on  
然而, 如果你不做些设置的话, 原来的查询语言会原封不动地被传过去, 实际上输出会是
    view plaincopy to clipboardprint?
    /page.php?id=37 -TO- 37.php?id=37  
    /page.php?id=40 -TO- 40.php?id=40  
    # and so on  
如果你希望去掉原查询语句, 你必须在末尾放置一个空的问号, 让我们称之为忽略标志.
    view plaincopy to clipboardprint?
    RewriteCond %{QUERY_STRING} ^id=([0-9]*)$  
    RewriteRule ^page\.php$ %1.php? [R=302,L]  
以下是使用RewriteRule处理查询语句时的一个快速参考

    view plaincopy to clipboardprint?
    Keep original query (default behavior)  
    RewriteRule ^page\.php$ /target.php [L]  
    # from  
    # to    
      
    Discard original query  
    RewriteRule ^page\.php$ /target.php? [L]  
    # from  
    # to    
      
    Replace original query  
    RewriteRule ^page\.php$ /target.php?bar=baz [L]  
    # from  
    # to   ?bar=baz  
      
    Append new query to original query  
    RewriteRule ^page\.php$ /target.php?bar=baz [QSA,L]  
    # from  
    # to   &bar=baz 
阅读(5496) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~