Nginx. 使用正则表达式进行重定向

Nginx. 使用正则表达式进行重定向

我是 nginx 新手。我在 Apache 之前就用过 nginx,但遇到了问题。

我似乎需要配置中的两条规则:

规则 1)如果我们有 URL“/my_path”,我们就不会触碰它,但用户会转到“/my_path.php”

规则 2) 如果我们有 url“/my_path.php”,我们将其更改为“/my_path”,并且用户转到“/my_path.php”,因为我们恢复到规则 1。

我觉得这对于SEO来说是必要的吗?

例如,我的配置是这样的……

server {
    listen 8080;
    server_name my_apache_server;

    location / {
        proxy_pass http://my_apache_server/;
    }

    location ~^\/(.+)$ {
        rewrite ^\/(.+)$ /$1.php break;
        proxy_pass http://my_apache_server/;
    }

    location ~^\/(.+)\.php$ {
        proxy_redirect http://my_apache_server/$1 http://my_apache_server/error.php;
    }

    ...
}

但是 nginx 显示错误:

nginx: [emerg] "proxy_pass" cannot have URI part in location given 
by regular expression, or inside named location, or inside "if" statement, 
or inside "limit_except" block

据我了解,proxy_pass 不能与正则表达式一起使用。这是正确的吗?我想我的配置错了?

有人能帮忙吗?提前感谢您的帮助。

我的解决方案- 有用

    # index page
    location / {
        proxy_pass http://my_apache_server;
    }

    # redirect(301) real "name.php" file to "name"
    location ~ ^/([A-Za-z_]+).php$ {
        rewrite  ^/([A-Za-z_]+).php$  /$1  permanent;
    }

    # not existen a-z file name to name.php
    location ~ ^/([A-Za-z_]+)$ {
        proxy_pass http://my_apache_server/$1.php;
    }

答案1

无法通过代理传递到 URI,这会导致 URL 后出现双斜杠 ( http://my_apache_server//$.php)。

尝试:

location ~^\/(.+)$ {
  rewrite ^\/(.+)$ /$1.php break;
  proxy_pass http://my_apache_server;
}

相关内容