apache rewrite 规则示例

 1 RewriteRule ^itnews/([0-9]{4})/([0-9]{2})([0-9]{2})/([^/_]*)_([0-9]+).html$ http://www.test.com/news/$1$2/13_$5.html [R=301,C]
 2 
 3 RewriteCond %{REQUEST_FILENAME} ^http://www.test.com(.*)$ 
 4 RewriteCond %{DOCUMENT_ROOT}%1 !-f 
 5 RewriteRule ^http://www.test.com/news/([0-9]{6})/13_([0-9]+).html$ http://www.test.com/news/$1/33_$2.html [R=301,C]
 6 
 7 RewriteCond %{REQUEST_FILENAME} ^http://www.test.com(.*)$ 
 8 RewriteCond %{DOCUMENT_ROOT}%1 !-f  
 9 RewriteRule ^http://www.test.com/news/([0-9]{6})/33_([0-9]+).html$ http://www.test.com/news/$1/11_$2.html [R=301,C]
10 
11 RewriteCond %{REQUEST_FILENAME} ^http://www.test.com(.*)$ 
12 RewriteCond %{DOCUMENT_ROOT}%1 !-f 
13 RewriteRule ^http://www.test.com/news/([0-9]{6})/11_([0-9]+).html$ http://www.test.com/news/$1/12_$2.html [R=301,L]

实现功能把 http://www.test.com/itnews/2013/0101/phone_12354.html 跳转到http://www.test.com/news/201301/(33|11|12)_12354.html

一些问题:

1.flags [chain|C]跳转后,下一个RewriteRule需写绝对地址

2.flags [chain|C]跳转后,RewriteCond 中{REQUEST_FILENAME} 为 http://www.test.com/a/a.html,非/var/www/test/a/a.html

3.  RewriteCond %{REQUEST_FILENAME} ^http://www.test.com(.*)$ [OR]  RewriteCond %{DOCUMENT_ROOT}%1 !-f 错误,RewriteCond语句之间默认的是AND,如果想要OR,则要明确的写出来。

 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^news/([0-9]{6})/12_([0-9]+).html$  http://www.test.com/news/$1/13_$2.html [R=301,C]
RewriteCond %{REQUEST_FILENAME} ^http://www.test.com(.*)$ 
RewriteCond %{DOCUMENT_ROOT}%1 !-f
RewriteRule ^http://www.test.com/news/([0-9]{6})/13_([0-9]+).html$  http://www.test.com/news/$1/33_$2.html [R=301,L]

 3.

RewriteEngine on
Rewriterule ^content-([0-9]+)-([0-9]+)-([0-9]+).html index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3

RewriteEngine on
Rewriterule ^content-([0-9]+)-([0-9]+)-([0-9]+).html  http://www.xxxx.com/index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3

由于apache配置环境或者相对路径不同。

4.

if(RewriteCond %{REQUEST_FILENAME} !-f [NC]){
 Apache服务器日志里查询到许多类似这样的警告:
[warn] RewriteCond: NoCase option for non-regex pattern '-f' is not supported and will be ignored.
}

5.

 

RewriteCond %{QUERY_STRING} ^a=(.*)$
RewriteRule ^test1.php$  http://www.test.com/test%1.html? [R=301,L]

 

 

 

参考网站:

http://www.sitepoint.com/apache-mod_rewrite-examples-2/
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

速查表:

RewirteRule 标记含义描述
RRedirect发出一个HTTP重定向
FForbidden禁止对URL地址的存取
GGone标记URL地址不存在
Proxy将URL地址传递至mod_proxy
LLast停止处理接下来的规则
NNext再次从第一个规则开始处理,但是使用当前重写后的URL地址
CChain将当前的规则和紧随其后的规则链接起来
TType强制执行指明的MIME类
NSNosubreq只在没有任何内部子请求执行时运用本规则
NCNocaseURL地址匹配对大小写敏感(不区分大小写)
QSAQsappend在新的URL地址后附加查询字符串部分,而不是替代
PTPassthrough将重写后的URL地址传递给另一个Apache模块进行进一步处理
SSkip忽略之后的规则
EEnv设置环境变量

 

(?:pattern)
匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
(?=pattern)
正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
(?<=pattern)
反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?<!pattern)
反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。

RewriteEngine on
RewriteRule ^test/$ /test.php

#RewriteRule ^test/$ http://127.0.0.1/test.php 跳转新页面

RewriteRule ^([a-z]{1}.+)$ 无法达到预期效果

 

 示例:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^fid-([0-9]+).html$
RewriteRule ^thread.php$  http://www.cnblogs.com/thread-%1? [R=301,L]
RewriteCond %{QUERY_STRING} ^t([0-9]+).html$
RewriteRule ^simple/$  http://www.cnblogs.com/read-%1? [R=301,L]
RewriteRule ^simple/$  http://www.cnblogs.com/index.php [R=301,L]

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !.(js|ico|gif|jpe?g|bmp|png|css)$ /index.php [NC,L]

RewriteCond %{QUERY_STRING} ^tid-([0-9]+).html$
RewriteRule ^read.php$  http://www.cnblogs.com/read-%1? [R=301,L]
RewriteCond %{QUERY_STRING} ^tid-([0-9]+)-page-([0-9]+).html$
RewriteRule ^read.php$  http://www.cnblogs.com/read-%1-%2? [R=301,L]

#RewriteRule ^read.php?tid-([0-9]+).html$    http://www.cnblogs.com/read-$1 [R=301,L]
#RewriteRule ^read.php?tid-([0-9]+)-page-([0-9]+).html$    http://www.cnblogs.com/read-$1-$2 [R=301,L]

 

 

bbb目录 rewrite(安装在127.0.0.1/bbb目录)
RewriteEngine on
#RewriteBase /bbb
RewriteCond %{QUERY_STRING} ^(?!index\.php)$
RewriteCond %{REQUEST_URI} !^/bbb/(static|uploads|ueditor|tmp|language|cache|app)
RewriteRule ^(.*)$  /bbb/?/$1 [L]

根目录
RewriteEngine on
RewriteRule ^ueditor/(.*)$  /bbb/ueditor/$1 

 

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

 

转载于:https://www.cnblogs.com/goldenstones/archive/2013/05/17/3068839.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值