`
paulfzm
  • 浏览: 874432 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Apache中RewriteCond规则参数介绍

 
阅读更多

Apache中RewriteCond规则参数介绍(转)

CodeIgniter2.0已经出来有20多天了呢~也就是我一直用的php框架(CI)。一直都在研究jquery,倒是把CI给忘到一边去了,呵呵~~今天公司事情不是很多,于是开始熟悉一下CI2.0的一些新特性~~刚好也再温习一遍CI的一些特性。早上看的东西不多,其中有这么一点知识,CI中默认情况下index.php 文件将被包含在你的URL中的,如果想要从url中删除这个默认的index.php,那么就需要用到Apache的强大的Rewrite功能了。

CI官方文档中给出的解决办法是这样的:

创建.htaccess 文件放到网站的根目录下,文件中的内容如下:

1 RewriteCond $1 !^(index\.php|images|robots\.txt)
2 RewriteRule ^(.*)$ /index.php/$1 [L]

呵呵~~由于本人对Appache的这些规则也没怎么深入的研究过,于是在网上找了点关于这个appache的RewriteCond的一点资料,觉得写得不错很详细,现分享于大家:

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

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

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

01 if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0')
02 {
03 //跳转到对index.m.php的访问
04 }
05 else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx')
06 {
07 //跳转到对index.L.php的访问
08 }
09 else
10 //跳转到对index.b.php的访问

再看例2:

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

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

再看例三:

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

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

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

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

———————————-小小地分割一下———————————————————
本文摘自: http://hi.baidu.com/%D2%BB%CE%C4%CC%EC/blog/item/ace7f14e19851cc4d0c86af2.html

分享到:
评论

相关推荐

    浅析Apache中RewriteCond规则参数的详细介绍

    Apache中 RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了

    Apache2.4 Win64位

    RewriteCond $1 !^(index.php|images|robots.txt) RewriteRule ^(.*)$ /index.php?/$1 [L] 如果是apache服务器出问题,看看是不是的Apache 把 .php 后缀的文件解析哪里有问题了。 Apache 将哪些后缀作为 PHP 解析...

    apache反向代理

    在上面的虚拟主机重写规则中,重写后的URL与您所请求的URL是一样的,我们的设想是将下面3个域名放到防火墙的/etc/hosts文件中,这样Apache将从内部3台Web服务器获得内容,并返回给外部用户,域名对应记录如下。...

    apache 二级域名解析实现方法

    代码如下: RewriteEngine on RewriteMap lowercase int:tolower RewriteMap vhost txt:/usr/local/etc/apache/vhost.map RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ RewriteCond ${vhost:%1} ^(/.*)$ ...

    apache中伪静态配置和使用(Apache虚拟主机下Discuz伪静态)

    二 将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉 三 在 httpd.conf中添加: <IfModule> RewriteEngine On #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+\.html RewriteRule ^(.*?(?:...

    apache-tools:apache工具

    允许您管理在apache2 mod_proxy conf中定义的Worker / BalancerMember: BalancerMember ajp://10.152.45.1:8001 route=web1 retry=60 BalancerMember ajp://10.152.45.2:8001 route=web2 retry=60 < /...

    apache rewrite防盗链三例

    1.利用rewrite 确认你的apache 能使用rewrite mod RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://linuxsky.net/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://linuxsky.net$ [NC] RewriteCond...

    apache rewrite规则实现白名单

    需求:  六个文件的入口,其他都重定向到index 自己的思路:  正则找出不是六个文件的URL的模式,进行过滤。...最后结果: 代码如下:<IfModule> RewriteEngine on RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^

    Apache Rewrite实现URL的301跳转和域名跳转

    方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。 基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下...

    13个实用的Apache Rewrite重写规则

    1.去掉域名中的www标记 代码如下:RewriteCond %{HTTP_HOST} !^jb51\.net$ [NC]RewriteRule .? http://jb51.net%{REQUEST_URI} [R=301,L]2.去掉www标记,但是保存子域名 代码如下:RewriteCond %{HTTP_HOST} ^www\....

    Apache服务器关闭TRACE Method请求方式的方法

    •虚拟主机用户可以在.htaccess文件中添加如下代码过滤TRACE请求: RewriteEngine onRewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)RewriteRule .* – [F] •服务器用户在httpd.conf尾部添加如下指令后重启apache即可...

    Apache服务器二级域名的完美实现

    其次,在 httpd.conf 中打开 mod_rewrite 之后,在 httpd.conf 的最后,添加以下内容: RewriteEngine on RewriteMap lowercase int:tolower RewriteMap vhost txt:/usr/local/etc/apache/vhost.map RewriteCond ${...

    ISAPI_Rewrite3 伪静态二级域名RewriteCond设置方法

    RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.52steel\.com$ RewriteCond %{HTTP_HOST} !^(www|wap)(.*)\.52steel\.com$ RewriteRule ^/?$ /%{HTTP_HOST} RewriteRule ^/([a-z0-9\-]+)\.52steel\.com/?$ /city.asp?cs=$1...

    Apache使用 .htaccess 来实现强制https访问的方法

    我们可以用Apache的.htaccess的重定向规则来实现http强制跳转到https访问网站。( 重要提示:必须将代码放到.htaccess文件内容的最前面,以保证重定向优先权。) 代码如下: RewriteEngine On RewriteCond %{SERVER_...

    Apache中301重定向的配置代码

    新建.htaccess文件,输入下列内容(需要开启mod_rewrite): 1)将不带WWW的域名转向到带WWW的域名下 代码如下: Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^jb51.net [NC] RewriteRule ^...

    Apache中利用mod_rewrite实现防盗链

    前提Apache中的mod_rewrite模块为激活状态,既然要消灭掉mp3文件的盗链就顺便也把图片盗链的设置给做了,下面是我在网站根目录的.htaccess文件中的配置,供同病相怜之人参考:。 view plaincopy to clipboard...

    Apache实现禁止中文浏览器访问与301重定向的方法

    在网站的根目录中的 htaccess 文件中,增加如下语句   ############################################ ## enable rewrites Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP:Accept-Language} ^zh-...

    Apache中使非伪静态url跳转到伪静态url的方法

    规则如下: RewriteRule ^article-([0-9]+).html$ /article.php?id=$1&r=1 [L] RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] RewriteRule ^article.php$ /articlel-%1.html? [L,R=301] 注意: 创建.htaccess...

    Apache,IIS下Discuz x1.5伪静态设置方法

    1.如是Apache服务器,操作如下: 建立.htaccess文件,在该文件里面写入如下伪静态规则: 代码如下: # 将 RewriteEngine 模式打开 RewriteEngine On # 修改以下语句中的 /discuz 为你的论坛目录地址,如果程序放在根...

Global site tag (gtag.js) - Google Analytics