1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Apache Rewrite伪静态基本及URL跳转

Apache Rewrite伪静态基本及URL跳转

时间:2019-04-26 10:29:51

相关推荐

Apache Rewrite伪静态基本及URL跳转

Rewirte主要的功能就是实现URL的跳转,Rewirte代码的正则表达式是基于Perl语言。基于服务器级的(httpd.conf)和目 录级的 (.htaccess)两种方式,而我们Apache一般用的是目录级的 (.htaccess)方式,所以海天这里学习和记录的也就是(.htaccess)方式,俗称伪静态。

既然Rewirte主要的功能就是实现URL的跳转,所以海天就直接从URL跳转入手,废话不多说,开始!

一般的.htaccess伪静态跳转写法为(下例为输入 的域名时跳转到):

RewriteEngine onRewriteCond %{HTTP_HOST} ^ [NC]RewriteRule ^(.*) / [L]

Apache Rewrite规则重写的标志

1) R[=code](force redirect) 强制外部重定向强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。3) G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。4) P(force proxy) 强制使用代理转发。5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。6) N(next round) 重新从第一条规则开始运行重写过程。7) C(chained with next rule) 与下一条规则关联如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。8 ) T=MIME-type(force MIME type) 强制MIME类型9) NS (used only if no internal sub-request) 只用于不是内部子请求10) NC(no case) 不区分大小写11) QSA(query string append) 追加请求字符串12) NE(no URI escaping of output) 不在输出转义特殊字符例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zoo13) PT(pass through to next handler) 传递给下一个处理例如:RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理Alias /def /ghi14) S=num(skip next rule(s)) 跳过num条规则15) E=VAR:VAL(set environment variable) 设置环境变量

以下直接举例说明:

例一、在一个虚拟主机里定义的Rewrite规则。功能是把client请求的URL地址前缀不是和 70.40.213.183都跳转到主机前缀为 。这样就避免相同内容的网页有多个指向的域名,如,而不利于SEO。

RewriteEngine on #打开rewirte功能RewriteCond %{HTTP_HOST} !^ [NC] #声明Client请求的URL地址中前缀不是,其中 [NC] 的意思是忽略大小写RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #声明Client请求的URL地址中前缀不是70.40.213.183RewriteCond %{HTTP_HOST} !^$ #声明Client请求的主机中前缀不为空RewriteRule ^(.*) / [L] #含义是如果Client请求的主机中的前缀符合上述条件,则直接进行跳转到http://aaacn/,[L]意味着立即停止重写操作,并 不再应用其他重写规则。这里的.*是指匹配所有URL中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.就是引用前面里的 (.*)字符。

例二、启用新域名为之后。需要将原来的域名, 以及论坛所在地址/bbs/定向到新的域名,以便用户可以找到,并且使原来的论坛 URL 继续有效而不出现 404 未找到。比如原来的/bbs/tread-60.html, 让它在新的域名下继续有效,点击后转发到/tread-60.html;而其他网页,如原先的http: ///purchase不会跳转到二级域名/purchase上,而是到 /purchase。

RewriteEngine OnRewriteCond %{REQUEST_URI} ^/bbs/RewriteRule ^bbs/(.*) /$1 [R=permanent,L]RewriteCond %{REQUEST_URI} !^/bbs/RewriteRule ^(.*) /$1 [R=permanent,L]

例三、同时达到下面两个要求:

1.用/xxx.php 来访问 /xxx/

2.用 来访问 /user.php?username=yyy 的功能

RewriteEngine OnRewriteCond %{HTTP_HOST} ^RewriteCond %{REQUEST_URI} !^user.php$RewriteCond %{REQUEST_URI} .php$RewriteRule (.*).php$ /$1/ [R]RewriteCond %{HTTP_HOST} !^RewriteRule ^(.+) %{HTTP_HOST} [C]RewriteRule ^([^.]+). /user.php?username=$1

例四、将URL地址 /type.php?typeid=* 跳转至 /type*.html,URL地址 /type.php?typeid=*&page=* 跳转至 /type*page*.html

RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]

相信通过以上四个简单的例子,我们已经能够写出简单的Apache Rewrite的URL跳转了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。