htaccess学习

转载 2013年12月05日 17:01:08

Apache中 RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了。
RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。

?
1
2
3
4
5
6
7
8
RewriteEngine on
RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla/5.0.*
RewriteRule  index.php            index.m.php
 
RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.*
RewriteRule  index.php            index.L.php
 
RewriteRule  index.php            index.b.php

上 面语句的作用是当你是用FF浏览器访问index.php这个文件的时候,会自动让你访问到index.m.php这个文件,当你是用一些移动终端访问的 时候,会让你对index.php这个文件的访问实际访问的是index.L.php去,如果你是用其它的浏览器访问的时候,会让你跳到 index.b.php。在说形象一点,上面的语句就等同于程序里面的下面语句(依PHP语句为例):

?
1
2
3
4
5
6
7
8
9
10
if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0')
{
//跳转到对index.m.php的访问
}
else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx')
{
//跳转到对index.L.php的访问
}
else
//跳转到对index.b.php的访问

再看例2:

?
1
2
RewriteCond %{HTTP_REFERER} (www.test.cn)
RewriteRule (.*)$ test.php

上面语句的作用是如果你访问的上一个页面的主机地址是www.test.cn,则无论你当前访问的是哪个页面,都会跳转到对test.php的访问。

再看例三:

?
1
2
3
4
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.*
RewriteRule (.*)$ test.php

上面语句的作用是如果你的地址是host1或host2或host3的时候,则就跳到对test.php。从这里可以看出,RewriteCond语句之间默认的是AND,如果想要OR,则要明确的写出来。

下面是自己收藏的一些有用的重写规则:

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

———————————-小小地分割一下———————————————————

基于ZF中的.htaccess文件学习Apache的Rewrite语法

Apache Rewrite ZF
  • topasstem8
  • topasstem8
  • 2014年05月05日 23:42
  • 2297

修改.htaccess的重写规则

在修复公司项目的时候,遇到一个问题: 点击主页面的login按钮,前往另一个登录页面的时候。 地址栏重复出现:http://127.0.0.1/sr/127.0.0.1/sr/login/127....
  • voilethht
  • voilethht
  • 2015年07月31日 14:28
  • 1128

实用.htaccess用法大全.htaccess使用详解

这里收集的是各种实用的 .htaccess 代码片段,你能想到的用法几乎全在这里。...
  • wuchengzeng
  • wuchengzeng
  • 2015年03月13日 13:30
  • 1434

centos里竟然看不到.htaccess文件

看看下面:[root@LAMP1 html]# ll 荤32 drwxr-xr-x. 15 501 80 4096 2 16 11:03 application drwxr-xr-x. 2 r...
  • qdujunjie
  • qdujunjie
  • 2015年03月10日 12:51
  • 4007

Apache下htaccess文件不起作用/rewrite 没有效果

【Apache下rewrite不成功】  不成功按照如下三步排查: 【第一步:打开rewrite 模块没有】 首先 我们找到apache安装目录下的 /conf/http.cnf 打开,文...
  • wujiangwei567
  • wujiangwei567
  • 2014年10月30日 20:58
  • 5482

Htaccess文件是什么以及Windows下自由创建.htaccess文件的N种方法

.htaccess是什么 概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。 通过htaccess文件,可以帮我们实现:网页301重定向、自定义404...
  • 21aspnet
  • 21aspnet
  • 2011年07月12日 14:05
  • 4199

用htaccess url重写实现多个二级域名映射同一个空间

用htaccess url重写实现多个二级域名映射同一个空间(linux虚拟主机空间,没钱买多个空间也不怕,一个主机空间开多个网站) 猜你想用这样的域名访问你的网站? blog.uacool....
  • snihcel
  • snihcel
  • 2014年05月30日 11:08
  • 1772

Windows cmd下建立.htaccess文件

Windows 图形下是不能直接建立空名字的内容的, 如.htaccess 在windows explorer 看来就只有后缀名没有文件名. 不过可以用windows 命令行来建立文件 打开cmd终...
  • lk188
  • lk188
  • 2012年02月22日 21:10
  • 997

为了调试htaccess文件需要关闭firefox缓存

今天在调试用htaccess文件的时候,真是让人的吐血,一会改了是直接去取缓存的,一会是去服务器拿新的,不知道htaccess文件的改动到底生效没有,真是上火,所以找到一个办法,就是下面的了~~~~用...
  • scchary
  • scchary
  • 2014年12月12日 16:11
  • 727

用htaccess进行访问控制

前面提到了很多有用的访问控制方法,其实通过Rewrite也能实现类似的功能,而且可以更强大。 1. 文件访问控制 利用 httpd.conf 中的 Order、Files 及 FilesM...
  • haozi3156666
  • haozi3156666
  • 2014年07月09日 16:34
  • 669
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:htaccess学习
举报原因:
原因补充:

(最多只允许输入30个字)