добавьте путь суффикса URL (для мобильных AMP), не вызывая цикла перенаправления в nginx

Я использую веб-сервер nginx для своего веб-сайта WordPress. Я собираюсь сделать его версией amp для мобильных устройств.

Я хочу добавить / amp / к моему URL-адресу. Я также использую красивую постоянную ссылку для своего текущего URL, поэтому могу ли я узнать, как переписать свой URL в мобильной версии на / amp /

Я использую rewrite ^ 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
задан 3 July 2016 в 06:58
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;

Вышеупомянутое гарантирует, что перезапись произойдет только в том случае, если ваш URL еще не закончился в / amp / (с использованием утверждений просмотра назад из PCRE , то есть библиотеки, которую NGINX использует для поддержки ] регулярные выражения ); кроме того, он также должен позаботиться о двойных // , которые изначально присутствовали в вашей схеме.

0
ответ дан 4 December 2019 в 06:11

Теги

Похожие вопросы