Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。若是要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,而后再利用源码和apxs来安装rewrite模块。html
基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下 直接利用RewriteEngine on来打开rewrite功能;另外一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,须要注意的是,必须在每一个virtualhost里用RewriteEngine on来打开rewrite功能。不然virtualhost里没有RewriteEngine on它里面的规则也不会生效。正则表达式
基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。express
RewriteCond重写规则的条件apache
RewriteCond指令定义一条规则条件。在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当自身的模板(pattern)匹配成功且这些条件也知足时规则才被应用于当前URL处理。 TestString是一个字符串,除了包含普通的字符外,还能够包括下列的可扩展结构:浏览器
HTTP headers:
|
connection & request:
|
server internals:
|
system stuff:
|
HTTP_USER_AGENT
|
REMOTE_ADDR
|
DOCUMENT_ROOT
|
TIME_YEAR
|
HTTP_REFERER
|
REMOTE_HOST
|
SERVER_ADMIN
|
TIME_MON
|
HTTP_COOKIE
|
REMOTE_USER
|
SERVER_NAME
|
TIME_DAY
|
HTTP_FORWARDED
|
REMOTE_IDENT
|
SERVER_ADDR
|
TIME_HOUR
|
HTTP_HOST
|
REQUEST_METHOD
|
SERVER_PORT
|
TIME_MIN
|
HTTP_PROXY_CONNECTION
|
SCRIPT_FILENAME
|
SERVER_PROTOCOL
|
TIME_SEC
|
HTTP_ACCEPT
|
PATH_INFO
|
SERVER_SOFTWARE
|
TIME_WDAY
|
|
QUERY_STRING
|
|
TIME
|
|
AUTH_TYPE
|
|
|
specials:
|
说明
|
API_VERSION
|
Apache与模块间的接口的版本号
|
THE_REQUEST
|
客户端发送到来的HTTP请求行的整行信息,不含其它的头字段信息,如("GET /index.html HTTP/1.1")
|
REQUEST_URI
|
HTTP请求行中请求的资源
|
REQUEST_FILENAME
|
请求中对应的服务器本地文件系统中全路径文件名
|
IS_SUBREQ
|
根据是否为SubRequest,分别值为”true”或”false”
|
当你在地址栏里输入 sina.com.cn google.cn服务器
看看有什么变化?是否是会自动跳转到 www.sina.com.cn www.google.cn数据结构
这一技术经过apache的rewrite能够实现,固然你得把 不带www的域名指向你服务器的IPdom
要是虚拟主机的话,得在viralhost段加入 ServerAlias xxx.com性能
而后打开重写引擎功能google
RewriteEngine On
能过rewritecond判断主机名是否带www
RewriteCond %{HTTP_HOST} ^xxx/.com$ [NC]
而后来一条
RewriteRule ^/(.*)$ http://www.xxx.com/$1 [R=301,L]
OK,重起apache,如今在浏览器中输入 xxx.com 看看是否是自动变成了www.xxx.com了呢。
从新整理一下就是:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^xxx/.com$ [NC]
RewriteRule ^/(.*)$ http://www.xxx.com/$1 [R=301,L]
用.htaccess文件的话: