将所有其他页面重定向到放大器版本,但主页-nginx除外

时间:2016-12-06 07:19:44

标签: regex redirect nginx

我正在尝试将我的所有移动用户重定向到网站的放大器版本,除了没有放大器版本的主页。每个其他放大器页面都有'/ amp'前缀为页面uri路径。 下面是我的nginx配置

if ($mobile_rewrite = perform) {
  rewrite ^(?!.*(/|/amp)) http://www.example.com/amp$request_uri? permanent;
  break;
}

我的目的是将任何路线重定向到放大器版本,主页除外。 重定向规则应为:

  

www.example.com ---> www.example.com

     

www.example.com/hollywood ---> www.example.com/amp/hollywood

     

www.example.com/article/abc ---> www.example.com/amp/article/abc

1 个答案:

答案 0 :(得分:1)

您可以使用

^(?!/?$|(?:.*/)?amp(?:/|$))

请参阅here what kind of input it matches

<强>详情:

  • ^ - 字符串开头
  • (?!(?:/?$|(?:.*/)?amp(?:/|$))) - 如果前瞻模式匹配,则匹配失败的否定前瞻:
    • /?$|(?:.*/)?amp(?:/|$) - 两种选择中的任何一种:
      • /?$ - 可选(1或0次出现)/,然后结束字符串$
      • | - 或
      • (?:.*/)?amp(?:/|$) - 任意0+字符的可选序列,直到最后/(参见(?:.*/)?),然后是amp,后跟/ }或字符串结束。

要添加条件以避免匹配jscss文件,请添加备选方案:

^(?!/?$|(?:.*/)?amp(?:/|$)|.*\.(?:js|css))
                           ^^^^^^^^^^^^^^