【发布时间】:2017-04-20 18:26:05
【问题描述】:
我正在尝试将我的所有移动用户重定向到网站的 amp 版本,但没有 amp 版本的主页除外。其他每个 amp 页面都在页面 uri 路径前添加了“/amp”前缀。 下面是我的 nginx 配置
if ($mobile_rewrite = perform) {
rewrite ^(?!.*(/|/amp)) http://www.example.com/amp$request_uri? permanent;
break;
}
我的意图是将任何路由重定向到除主页之外的 amp 版本。 重定向规则应为:
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
【问题讨论】:
-
看起来您需要
^(?!/?$)- 匹配所有进入正则表达式引擎的空输入或/输入。 -
好的。我不太擅长正则表达式。我如何排除“/amp”和“/”。否则我会得到太多重定向。
-
如果
amp也应该被“排除”,也许你需要使用^(?!(?:/?$|(?:.*/)?amp(?:/|$))) -
请注意,正则表达式本身要么匹配字符串,要么不匹配,它不允许/排除/无论如何。 Nginx 将根据匹配或不匹配进行重定向。那么,应该匹配什么输入呢?
-
每个接受主页的页面都应该重定向到 amp 页面。我需要将 '/amp' 与主页一起放在正则表达式忽略列表中,否则 nginx 将无限次重写导致“重定向过多”。除“主页”和“amp”页面外的所有页面都应匹配并允许