http://www.rockbb.com/blog/?p=319

http://www.cnblogs.com/scgw/archive/2011/12/10/2283029.html

我的理解:当浏览器发送一个请求到服务器请求一个资源的时候,比如 http://localhost/user/13 ,我们的web服务器---这里是Apache服务器,接收到这个请求,就会去判断

这个资源在我们的服务器上到底有没有。但在这之前呢,我们的 Apache 可以对这个请求的URL 进行一个转换 http://localhost/user/id ---->http://localhost/index.php/user/13 ,对吧,转换后的这个路径才是正确的。那怎么实现这种转换呢,就需要用到Apache 的Rewrite模块了

RewriteEngine on //重写引擎打开,否则下面这几天指令无效

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f // RewriteCond 配合RewriteRule使用,这连个RewriteCond都成立的话,才会执行下面这条 “替换”
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d //第一条表示请求的资源不是文件,第二条表示请求的资源不是目录
RewriteRule ^(.*)$ /index.php/$1

  上面RewriteCond ,表示重写条件(相当于我们程序的if(condition){if(condition){ rewriteRule}}),注意我这里

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f 加了%{DOCUMENT_ROOT},这是应为我的这个配置是写在httpd.conf中的(或是httpd-vhosts.conf)中的,这里面
的重写路径是相对路径,这不同于 .htaccess中的,如果是写在.htaccess中的话 ,则是会自动带上 DOCUMENT_ROOT这个路径的地址。注意这里很可能会出错,可能就是少了 %{DOCUENT_ROOT}. 这里,我的网站呢根目录(即http://localhost/)对应的是 webroot 这个文件夹

看url地址:  http://localhost/dbuser/getList  --->在apache 中会重写为 http://localhost/index.php/dbusers/geList
       http://localhsot/user/ (我的webroot/user/这个目录下有一个index.html文件,这个的我的主文件,这里user/目录下其实是我的一个AngularJS 的单页面应用程序,即SPA了) ,在Apache中就不会重写了, 访问返回的就是 http://localhost/user/index.html (忘了说,我的配置中还有这么一条 DirectoryIndex index.html index.php,这个是默认主页)
现在
。。
Summary : 注 webroot/index.php index.php我们网站后台的入口地址是在webroot/这个目录下面的。
经过这条简单的重写,就实现了我的项目文件的目录结构的部署问题。 我的前端页面都是放在 /webroot/user/下面的。主页面是该目录下的 index.html 。这是一个Angular 应用,然后通过
ajax请求访问服务端的数据,返回JSON格式的数据,Anjular操作DOM,双向数据绑定。 Ajax请求的路径都类似于 http://localhost/dbusers/getlist ,而这种路径都会解析成
http://localhost/index.php/dbusers/getLIst这就会进入我们后台的系统了(index.php就是我们后台的主入口文件,我们后台用的是PHP 的开源的MVC框架)。这样就实现了比较优雅的前后端分离了。后台知识提供API(数据的接口,并不生存HTML的视图),所有的视图都是放在 webroot/user/目录下,静态的资源 视图 html就完全放到前端,和后台分离了。这就比较接近 RESTful的软件架构风格了。

apache RewriteCond RewriteRule的更多相关文章

  1. Apache RewriteCond RewriteRule 入门和Laravel去掉index.php

        Ci删除index.php办法: 创建.htaccess 文件放到网站的根目录下,文件中的内容如下: RewriteEngine onRewriteCond %{REQUEST_FILENAM ...

  2. Apache中 RewriteRule 规则参数介绍

    Apache中 RewriteRule 规则参数介绍 摘要: Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量 ...

  3. .htaccess 基础教程(四)Apache RewriteCond 规则参数

    Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制.此UR ...

  4. Apache的RewriteRule规则详细介绍

    R[=code](force redirect) 强制外部重定向 (rkyW z强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定, ...

  5. apache url rewrite 的RewriteRule参数详解

    apache url rewrite 的RewriteRule参数详解 我们经常会在apache那边对一些url进行一些重写操作,那么就会涉及到很多的重写策略的选择,比如重定向的方式,参数的处理,规则 ...

  6. Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结

    一. 简单实例介绍一般来说,apache配置好http和https后,如果想要做http强转到https,需要设置url重定向规则,大致需要下面几个步骤即可完成配置: 1)在httpd.conf文件里 ...

  7. .htaccess 基础教程(三)RewriteCond标志符,RewriteRule适用的标志符

    1.利用 .htaccess 防止盗链 如果不喜欢别人在他们的网页上链接自己的图片.文档的话,也可以通过htaccess的指令来做到.当然这样也可以对你的网站服务器压力变小! 这次先给出‘代码’,然后 ...

  8. apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法

      <Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> ErrorDocument 404 /404/404.h ...

  9. Apache之AllowOverride参数详解

    通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里.但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对 ...

随机推荐

  1. 超赞的OOM检测(除了mat以外)

    今天看了下微博,扔物线分享了个内存检测的工具: 内存泄露是 OOM 最常见的原因,但它的侦测需人工排查,往往眼看瞎也未必能找到泄露的内存.Square 新库 LeakCanary 用一种巧妙的思路实现 ...

  2. 编译OpenGL代码时发生 Inconsistency detected by ld.so: dl-version.c: 224: _dl_check_map_versions: Assertion `needed != ((void *)0)' failed! 错误的解决方案

    注:本解决方案适用于使用N卡的PC 出现该错误 , 一般是由于开源的nouveau驱动和Nvidia专有驱动冲突导致的 .在解决该问题时 , 尝试过卸载 N 卡专有驱动 , 仅使用开源nouveau驱 ...

  3. 深入了解当前ETL的一些基本技术

    数据集成是把不同来源.格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全 面的数据共享,是企业商务智能.数据仓库系统的重要组成部分.ETL是企业数据集成的概念出发,简要分析了当前ETL中用到 ...

  4. 新随笔ps泡泡制作

    http://jingyan.baidu.com/article/4d58d5413568a79dd4e9c016.html

  5. LeetCode OJ 92. Reverse Linked List II

    Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...

  6. 初识golang

    golang是一门编译型的语言. 问题1:int和*int有啥区别?和c语言中有区别么? var a int = 32 var b *int = &a fmt.Println("ty ...

  7. php过滤函数

    addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符 addslashes — 使用反斜线引用字符串 strip_tags — 从字符串中去除 HTML 和 PHP 标记 stri ...

  8. VS2005--设置Release模式下调试

    今天初略看了下,所谓Release和Debug只是大家和编译器约定的一些生成规则而已,所以调试是无所谓Release和Debug的,只是由于生成的规则不同,可能Release的一些调试结果没Debug ...

  9. sql server统计字段的值在某些范围内中的个数

    有一张表test如下: create table test ( id ,) primary key, num int ) 插入数据: ); ); ); ); ); ); ); ); ); ); ); ...

  10. 获取sql执行时间

    sql server中获取要执行的sql或sql块的执行时间,方法之一如下: declare @begin datetime,@end datetime set @begin =getdate() - ...