zoukankan      html  css  js  c++  java
  • 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 标记 含义 描述
    R Redirect 发出一个HTTP重定向
    F Forbidden 禁止对URL地址的存取
    G Gone 标记URL地址不存在
    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 设置环境变量
    (?: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>
  • 相关阅读:
    [009]类型转换
    [008]new、delete及动态内存分配
    [007]操作符的求解顺序
    [010]转+修正---C++的贪吃蛇程序(未用面向对象封装)
    [006]为什么C++会被叫做是C++?
    [005]逗号表达式
    [JavaScript]转--如何让JS代码高大上
    [009]C---关于输出文本的打印问题
    [008]C---gcc环境下的一个编译器版本问题
    PlayMaker 状态机FSM重用
  • 原文地址:https://www.cnblogs.com/goldenstones/p/3068839.html
Copyright © 2011-2022 走看看