## mod_alias模块
这个模块即可以完成别名定义,也可以处理URL请求。
### 别名定义
* Alias 将URL映射到定义的目录或文件上
* AliasMatch 使用正则表达式定义
* ScriptAlias 定义一个目录为CGI容器
* ScriptAliasMatch 使用正则表达式定义
### 重定向定义
Redirect permanent /download http://www.abc.com/download
* pernanent 状态码301 表示永久移动
* temp 状态码302 表示找到资源,默认
* seeother 状态代码303 资源位置被替换
* gone 状态代码410 表示资源已经不存在
* RedirectPermanent 表示 Redirect permanent
* RedirectTemp 表示 Redirect temp
## mod_rewrite模块
### 工作流程
![](http://om4h63cja.bkt.clouddn.com/17-6-7/46192127.jpg)
### 重写指令
* RewriteEngine指令
参数为on或者off,设置是否启用或者禁止模块
* RewriteRule指令
语法格式
~~~
RewriteRule Pattern Substitution [flags]
~~~
#### Pattern
为当前请求的URL正则表达式,这个URL可能被RewriteRule规则或者alias指令修改过。使用“!”求反操作,不能使用匹配模式中的分组通配。
#### Substitution
参数是当原始URL与Pattern匹配时,用来替换的字符串。
* 对Pattern中的分组可以使用$N进行反向引用。
* 对RewriteCond中的分组可以使用%N进行反向引用。
* 规则条件测试字符串%{VARNAME}中的服务器变量
* 映射函数调用${mapname:key|default},用户可以通过${mapname:key|default}的形式来调用RewriteMap定义的映射。
* “-”作用是不做任何处理
1 重写到文件系统的路径
~~~
RewriteRule "^/games" "/usr/local/games/web"
~~~
2 重写到DocumentRoot目录下的路径
~~~
RewriteRule "^/foo$" "/bar"
~~~
3 重写到完整的URL
~~~
RewriteRule "^/product/view$" "http://site2.example.com/seeproduct.html" [R]
~~~
#### flags
* last|L 结尾规则
这个标记用于阻止当前已被重写的URL被后继规则再次重写
* proxy|P 强制为代理
此标记使替换成分被内部地强制作为代理请求发送,并立即中断重写处理,然后把处理移交给mod_proxy模块。替换串是一个能够被mod_proxy处理的有效URI(比如以http://hostname开头)。可以把某些远程成分映射到本地服务器域名空间,从而增强了ProxyPass指令的功能。注意:要使用这个功能,必须已经启用了mod_proxy模块。
* redirect|R[=code]
强制外部重定向
* forbidden|F
强制禁止当前URL响应,并像客户端发送一个403httpd响应代码
* gone|G
强制废弃当前URL,并像客户端发送一个410 httpd响应代码
* nocase|NC
忽略pattern中的大小写
* redirect|R [code]
将重写的URL作为重定向处理,默认是302
* next|N 从头再来
重新执行重写操作(从第一个规则重新开始)。此时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理过的URL。它对应于Perl中的next命令或C语言中的continue命令。此标记可以重新开始重写操作(立即回到循环的开头)。但是要小心,不要制造死循环!
* noescape|NE 在输出中不对URI进行转义
此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。一般情况下,特殊字符('%', '$', ';'等)会被转义为等值的十六进制编码('%25', '%24', '%3B'等)。
* chain|C 链接下一规则
此标记使当前规则与下一个规则相链接。它产生这样的效果:如果一个规则被匹配,则继续处理其后继规则,也就是这个标记不起作用;如果该规则不被匹配,则其后继规则将被跳过。比如,在一个目录级规则中执行一个外部重定向时,你可能需要删除".www"(此处不应该出现".www")。
* passthrough|PT 移交给下一个处理器
此标记强制重写引擎将内部request_rec结构中的uri字段设置为filename字段的值,使得RewriteRule指令的输出能够被(从URI转换到文件名的)Alias, ScriptAlias, Redirect等指令进行后续处理。
举一个能说明其含义的例子:如果要将/abc重写为/def,然后再使用mod_alias将/def转换为/ghi,可以这样:
```
RewriteRule ^/abc(.*) /def$1 [PT] Alias /def /ghi
```
如果省略了PT标记,虽然将uri=/abc/...重写为filename=/def/...的部分运作正常,但是后续的mod_alias在试图将URI转换到文件名时会遭遇失效。
注意:如果需要混合使用多个将URI转换到文件名的模块时,就必须使用这个标记。。此处混合使用mod_alias和mod_rewrite就是个典型的例子。
~~~
Alias /icons /usr/local/apache/icons
RewriteRule /pics/(.+).jpg /icons/$1.gif [PT]
~~~
当请求/pics/下的图片文件时, 实际是返回的是 /icons/目录下的同名文件. 需要注意的是一定要设置 [PT] 标志. 否则Alias设置无效.
### RewriteCond
RewriteCond用来定义重写条件
~~~
RewriteCond TestString CondPattern
~~~
* 对RewriteRule中的分组可以使用$N进行反向引用。
* 对RewriteCond中的分组可以使用%N进行反向引用。
* 服务器变量
![](http://om4h63cja.bkt.clouddn.com/17-6-7/84803184.jpg)
#### CondPattern
* < CondPattern 将CondPattern视为纯字符串,与teststring按字典顺序进行比较,teststring小于CondPattern为真
* \> CondPattern 将CondPattern视为纯字符串,与teststring按字典顺序进行比较,teststring大于CondPattern为真
* = CondPattern 将CondPattern视为纯字符串,与teststring按字典顺序进行比较,teststring等于CondPattern为真
* -d 将teststring视为路径名并测试是否为一个存在的目录
* -f 将teststring视为路径名并测试是否为一个存在的常规文件
* -s 将teststring视为路径名并测试是否为一个存在的切大于0的常规文件
* -l 将teststring视为路径名并测试是否为一个存在的常规文件
* -f 将teststring视为路径名并测试是否为一个存在的符号链接
* -x 将teststring视为路径名并测试是否为一个存在的可执行文件
* -F 检查teststring是否为有效的文件
* -U检查tesstring是否为有效的URL
nocase|NC 忽略大小写
ornext|OR 多个条件或者关系
### RewriteBase
在目录重写中,只要请求的URL不能与本地的文件系统匹配时,就需要每个目录设置一个重写的基准URL,
- 目录
- 离散的内容
- IO模型
- 网卡绑定
- ssh
- 硬件测试
- 硬件
- limits
- 网络流量
- 硬盘IO
- 硬盘
- tmux
- 主机名和域名
- http_proxy
- iptables
- 内核参数
- 块设备和字符设备
- 内存
- 虚拟内存并非交换分区
- 网络延时
- 概念
- 多核压缩
- linux基础
- SSH协议
- 软件管理
- yum
- 制作本地源 yum系列
- 制作本地源 apt系列
- apt
- 在 Linux 中移除从源代码安装的程序的一种简单的方法
- 其他
- 源码编译和二进制安装后更改配置
- DNS
- bind
- 守护进程
- 特殊权限
- limit.conf配置
- 网络
- shell-ok
- 变量ok
- 数组ok
- 系统变量和环境变量
- 运算符和计算-ok
- 条件测试-ok
- 选择-ok
- shell循环-ok
- 输出echo和printf-ok
- 技巧-ok
- pre-web
- http协议
- web服务器
- Apache
- apache安装
- yum安装
- 二进制安装
- 编译安装
- httpd命令
- 运行 监控apache
- apache配置文件
- 常用配置
- MPM多处理模块
- 编译模块
- apache模块
- apache核心模块
- apache标准模块
- apache第三方模块
- 虚拟主机
- 1
- CGI-FastCGI-SSI
- 别名和重定向
- apache应用
- 301重定向
- apache防盗链
- http转化为https
- 访问时间段控制
- 控制访问目录
- 限制指定USER_AGENT
- 不同客户端访问不同网页
- apache黑名单
- httpd之禁止解析php
- 不记录css/js/img的访问日志
- 浏览器端静态缓存
- apache访问日志自动切割
- order-require
- 压缩传输
- httpd-ssl
- apache代理
- 正向代理
- 反向代理
- apache调优
- httpd压力测试工具ab
- CGI测试
- php
- php原理
- httpd和php的结合方式
- php yum安装之DSO模式
- php 编译安装之DSO模式
- php-fpm详解
- php yum安装之php-fpm模式
- php 编译安装之FastCGI模式
- php扩展之mysql
- php扩展之gd
- php扩展之pcntl
- php扩展之xcache
- php扩展之ZendGuardLoader
- phpMyAdmin
- wordpress
- 数据库-mysql
- 数据库原理
- mysql数据库原理
- mysql源码编译安装
- mysql二进制包安装
- mysql命令行工具
- 更改密码
- 数据库授权grant
- mysql日志
- 命令
- 常用
- 小命令大作为
- awk 报告生成器
- 网络命令
- 命令查找
- 压缩归档命令
- 文件管理
- 文件管理命令
- 文件查看命令
- 目录管理命令
- 用户管理命令
- 用户权限管理
- curl
- cheat
- chrony
- command
- crontab任务计划
- cut
- date
- dd
- df
- echo
- find
- grep
- hash
- iftop
- kill pkill killall
- ls
- lsmod和modprobe
- lsof
- man
- mkpasswd
- mount
- mtr
- netstat
- nmap
- nc
- NTP
- passwd
- rm
- rdate
- pv
- sar系统活动情况报告
- sed文本处理命令
- setup
- screen
- shutdown
- sort 命令
- sudo
- tcpdump
- top
- uniq
- wget
- who
- xargs
- 监控
- zabbix邮件报警
- Redis
- redis安装
- redis数据类型和操作方法
- redis持久化和配置
- redis主从配置
- php连接redis
- redis实现session共享
- 安装测试
- redis设置密码
- ELK日志分析系统
- elasticsearch
- logstash
- logstash插件
- filebeat日志收集
- kibana
- jenkins
- jenkins安装与配置
- 案例1
- 案例2
- 案例3
- 代码仓库之svn
- svn服务端配置
- 常用操作
- svn备份
- LB集群
- LVS负载均衡集群
- ipvsadm使用方法
- LVS调度方法
- NAT原理
- NAT实践
- DR原理
- DR实践
- TUN原理
- LVS持久连接
- HA集群
- HPC集群
- 共享存储
- ftp协议
- vsftpd
- NFS
- 网站架构发展
- 文件同步
- rsync基本用法
- rsync安装和使用_拉取模式
- lsyncd安装和用法
- zabbix
- zabbix服务端安装
- zabbix客户端安装
- zabbix编译安装
- zabbix监控tomcat
- zabbix监控mysql
- gitlab
- supervisor
- nsq
- ruby
- nodejs
- consul
- mesos
- zookeeper
- rwho
- 对象存储
- 工具
- rclone
- minio
- linux 性能调优
- CPU
- 第一部分 CPU
- 安全