添加 URL 后缀路径(用于移动 AMP),而不会导致 nginx 中出现重定向循环

添加 URL 后缀路径(用于移动 AMP),而不会导致 nginx 中出现重定向循环

我正在为我的 wordpress 网站使用 nginx 网络服务器。我打算将其打造成为用于移动服务的 amp 版本。

我想将 /amp/ 添加到我的网址。我还对我当前的网址使用了漂亮的永久链接,所以我知道如何在移动版本中将我的网址重写为 /amp/

我正在使用重写^http://example.com$request_uri/amp/ break; 但是当我提供网络服务时它变成了这样

exmaple.com/homepage//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp//amp/

我希望当 iPhone 提供网页时,链接将是http://exmaple.com/homepage/amp/

我的主要目的只是想将 /amp/ 添加到网站的任何链接。

这是我的 nginx.conf

server {
listen       80;
server_name  example.com;
charset utf-8;
access_log  logs/xxx.access.log;

root   /var/www/html;


index index.php;

location / {
    try_files $uri $uri/ /index.php?q=$uri;
}

location /en {
    try_files $uri $uri/ /en/index.php?q=$uri;
}

location /my {
    try_files $uri $uri/ /my/index.php?q=$uri;
}

set $mobile_rewrite do_not_perform;
if ($http_user_agent ~* "  (android|bb\d+|meego).+mobile|ip(hone|od) {
set $mobile_rewrite perform;
}


## redirect to AMP ##
if ($mobile_rewrite = perform) {
rewrite ^ http://example.com$request_uri/amp/ break;

break;

}

谢谢

答案1

听起来你有一个重定向循环,因为你/amp/在请求 URL 的末尾不断添加。

也许您应该有一个条件重写指令(或两个!)而不是通配符。

-rewrite ^ http://example.com$request_uri/amp/ break;
+rewrite ^(.*(?<!/amp))/$ http://example.com$1/amp/ break;
+rewrite ^.*(?<!/amp/)$ http://example.com$uri/amp/ break;

上述内容确保rewrite仅当您的 URL 不是以 结尾时才会发生/amp/(使用后视断言聚合酶链反应,这是NGINX用于支持常用表达);另外,它还应该处理//最初出现在你的方案中的重复。

相关内容