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 标记 含义 描述 R Redirect 发出一个HTTP重定向 F Forbidden 禁止对URL地址的存取 G Gone 标记URL地址不存在 P Proxy 将URL地址传递至mod_proxy L Last 停止处理接下来的规则 N Next 再次从第一个规则开始处理,但是使用当前重写后的URL地址 C Chain 将当前的规则和紧随其后的规则链接起来 T Type 强制执行指明的MIME类 NS Nosubreq 只在没有任何内部子请求执行时运用本规则 NC Nocase URL地址匹配对大小写敏感(不区分大小写) QSA Qsappend 在新的URL地址后附加查询字符串部分,而不是替代 PT Passthrough 将重写后的URL地址传递给另一个Apache模块进行进一步处理 S Skip 忽略之后的规则 E Env 设置环境变量
[table]
[tr]
[td=1,1,75]
(?:pattern)
[/td]
[td=1,1,658]
匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
[/td]
[/tr]
[tr]
[td=1,1,75]
(?=pattern)
[/td]
[td=1,1,658]
正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
[/td]
[/tr]
[tr]
[td=1,1,75]
(?!pattern)
[/td]
[td=1,1,658]
正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
[/td]
[/tr]
[tr]
[td=1,1,75]
(?
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com