![添加 URL 后缀路径(用于移动 AMP),而不会导致 nginx 中出现重定向循环](https://linux22.com/image/684554/%E6%B7%BB%E5%8A%A0%20URL%20%E5%90%8E%E7%BC%80%E8%B7%AF%E5%BE%84%EF%BC%88%E7%94%A8%E4%BA%8E%E7%A7%BB%E5%8A%A8%20AMP%EF%BC%89%EF%BC%8C%E8%80%8C%E4%B8%8D%E4%BC%9A%E5%AF%BC%E8%87%B4%20nginx%20%E4%B8%AD%E5%87%BA%E7%8E%B0%E9%87%8D%E5%AE%9A%E5%90%91%E5%BE%AA%E7%8E%AF.png)
我正在为我的 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用于支持常用表达);另外,它还应该处理//
最初出现在你的方案中的重复。