apache - mod_rewrite配置指令RewriteBase_xinhaozheng的博客-程序员秘密

技术标签: server  apache  file  processing  .htaccess  url  

看了好几遍,还是不太清楚.先记下了,有空再看看.apache发展了这么多年,我也用了这么久,就这样一个指令,会用但是不完全了解实际的含义.

RewriteBase Directive

Description: Sets the base URL for per-directory rewrites
Syntax: RewriteBase URL-path
Default: See usage for information.
Context: directory, .htaccess
Override: FileInfo
Status: Extension
Module: mod_rewrite

The RewriteBase directive explicitly sets the base URL for per-directory rewrites. As you will see below, RewriteRule can be used in per-directory config files (.htaccess). In such a case, it will act locally, stripping the local directory prefix before processing, and applying rewrite rules only to the remainder. When processing is complete, the prefix is automatically added back to the path. The default setting is; RewriteBase physical-directory-path

When a substitution occurs for a new URL, this module has to re-inject the URL into the server processing. To be able to do this it needs to know what the corresponding URL-prefix or URL-base is. By default this prefix is the corresponding filepath itself. However, for most websites, URLs are NOT directly related to physical filename paths, so this assumption will often be wrong! Therefore, you can use the RewriteBase directive to specify the correct URL-prefix.

If your webserver's URLs are not directly related to physical file paths, you will need to use RewriteBase in every .htaccess file where you want to use RewriteRule directives.

For example, assume the following per-directory config file:

#
#  /abc/def/.htaccess -- per-dir config file for directory /abc/def
#  Remember: /abc/def is the physical path of /xyz, i.e., the server
#            has a 'Alias /xyz /abc/def' directive e.g.
#

RewriteEngine On

#  let the server know that we were reached via /xyz and not
#  via the physical path prefix /abc/def
RewriteBase   /xyz

#  now the rewriting rules
RewriteRule   ^oldstuff/.html$  newstuff.html

In the above example, a request to /xyz/oldstuff.html gets correctly rewritten to the physical file /abc/def/newstuff.html.

For Apache Hackers

The following list gives detailed information about the internal processing steps:

Request:
  /xyz/oldstuff.html

Internal Processing:
  /xyz/oldstuff.html     -> /abc/def/oldstuff.html  (per-server Alias)
  /abc/def/oldstuff.html -> /abc/def/newstuff.html  (per-dir    RewriteRule)
  /abc/def/newstuff.html -> /xyz/newstuff.html      (per-dir    RewriteBase)
  /xyz/newstuff.html     -> /abc/def/newstuff.html  (per-server Alias)

Result:
  /abc/def/newstuff.html

This seems very complicated, but is in fact correct Apache internal processing. Because the per-directory rewriting comes late in the process, the rewritten request has to be re-injected into the Apache kernel. This is not the serious overhead it may seem to be - this re-injection is completely internal to the Apache server (and the same procedure is used by many other operations within Apache).

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xinhaozheng/article/details/5941940

智能推荐

ros----vscode 使用_基本配置_liuanqi368的博客-程序员秘密

vscode 使用_基本配置4.1 创建 ROS 工作空间mkdir -p xxx_ws/src(必须得有 src)cd xxx_wscatkin_make4.2 启动 vscode进入 xxx_ws 启动 vscodecd xxx_wscode .4.3 vscode 中编译 ros快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build可以点击配置设置为默认,修改.vscode/tasks.json 文件{// 有关 tasks.json 格

深入了解JVW_奋斗吧_攻城狮的博客-程序员秘密

Java内存组成介绍:堆(Heap)和非堆(Non-heap)内存按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就...

Python 文件与目录操作 ._duhai的博客-程序员秘密

目录列出一个目录的内容import os for fileName in os.listdir ( '/' ): print fileName创建目录: os.mkdir('testDirectory')删除目录: os.rmdir('testDirectory')创建多级目录: os.makedirs ('I/will/show/you/how/deep/the

2019已经很冷,2020年Android工作或更难找——进大厂面试必备基础技能_Android725的博客-程序员秘密

一、写在开头在互联网行业里,2019年来到今天你能听到的消息都是什么样的?“某D公司开始裁员了”“某A公司据说冻结社招了”“据说J公司今年没有年终奖““据说M公司要裁员50%”……2019全年从开头到结尾似乎就没多少好消息,而到了2020年市场行情也许会更加寒冷。这里我说的是整个互联网行业,并没有单单挑出某个公司或者某个细分领域。而对于广大Android开发者来说,找工作似乎也变得越来越难了。2019年1月,我在51job搜索了一下北京地区的Android岗位,只有2100多个,而几年前的时

黑马程序员_java基础之异常处理_陌陌谢谢有你的博客-程序员秘密

对于角标是整数不存在,可以用角标越界表示,对于负数为角标的情况,准备用负数角标异常来表示。负数角标这种异常在java中并没有定义过。那就按照java异常的创建思想,面向对象,将负数角标进行自定义描述。并封装成对象。这种自定义的问题描述成为自定义异常。 注意:如果让一个类称为异常类,必须要继承异常体系,因为只有称为异常体系的子类才有资格具备可抛性。才可以被两个关键

随便推点

数据库习题_kuno321的博客-程序员秘密

 课本习题8.设某商业集团中有若干公司,其人事数据库中有3个基本表:职工关系 EMP(E#,ENAME,AGE,SEX,ECITY)其属性分别表示职工工号、姓名、年龄、性别和居住城市。工作关系 WORKS(E#,C#,SALARY)其属性分别表示职工工号、工作的公司编号和工资。公司关系 COMP(C#,CNAME,CITY,MGR_E#)其属性分别表示公司编号、公司

python tqdm_arcobaleno1996的博客-程序员秘密

给python增加显示条,只要在循环体上面封装即可,可以很方便地知道迭代运行到哪里了:from tqdm import tqdmfor i, path in enumerate(tqdm(impaths)):

Cocos 2d-x 批处理创建新工程_COCO56(徐可可)的博客-程序员秘密

REM 关闭命显示rem echo offREM 获取工程名set /p projectName=Please input the name of your project:REM 合成创建工程的cocos命令set cocosCommand=cocos new %projectName% -l cpp -p xyz.coco56.%projectName%echo 正在创建"...

《VMware Virtual SAN权威指南(原书第2版)》一3.2 为VSAN服务的VMkernel网络_weixin_34206899的博客-程序员秘密

3.2 为VSAN服务的VMkernel网络所有参与VSAN网络的ESXi主机都需要相互通信。vSphere 5.5引入了一个新的VMkernel类型,叫做Virtual SAN Traff?ic(虚拟SAN流量)。只有当VSAN VMkernel端口在加入到VSAN群集的每一台ESXi主机上都存在的时候,VSAN群集才会成功构建起来。在构建VSAN群...

redux_这个名字好0.0的博客-程序员秘密

reduxredux 基本介绍redux 是一个状态机。这个是用来管理状态的。这里要澄清一点, redux 并非 Facebook 推出的,而是由一个个人作者 Dan Abramov 所推出。redux 和 react 的关系两者之间本来没有任何关系,我们可以将 redux 用于 react、vue、angular 等技术,都可以用 redux,只不过 redux 和 react 配合得最好,一起出现的频率最多,所以之后在开发 react 应用的时候,自然而然就会想到使用 redux 来管理 re

C / C++中的零(0)_kaffeel的博客-程序员秘密

零(0)是一个整数。由于各种标准转换,0可以被用于表示任意整数(布尔量:bool,字符型:char,整型数:int)、浮点类型、指针、还有指向成员的指针的量。0的类型将由上下文确定。 由于没有任何对象会被分配到地址0,因此,0也被当做一个指针常量,表明一个指针当时并没有指向任何对象。在C语言中非常流行的就是用NULL宏表示0指针。由于C++收紧的类型检查规则,采用普通的0表示空指针比NULL更好一些。如果你习惯了使用NULL来表示0指针,那么最好采用如下定义: const    int NULL = 0

推荐文章

热门文章

相关标签