标签:
Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下 直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。
基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。
RewriteCond重写规则的条件
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的域名指向你服务器的IP
要是虚拟主机的话,得在viralhost段加入 ServerAlias xxx.com
然后打开重写引擎功能
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文件的话:
标签:
原文地址:http://www.cnblogs.com/macil/p/4635330.html