我正在为我的 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用于支持常用表达);另外,它还应该处理//
最初出现在你的方案中的重复。