删除尾部斜杠 NGINX 2 个站点一个域名

删除尾部斜杠 NGINX 2 个站点一个域名

我有以下 NGINX 配置

server {

    listen 80;

    server_name www.cakein.local;

    rewrite_log on;


    # removes trailing slashes (prevents SEO duplicate content issues)
    #if (!-d $request_filename) {
    #    rewrite ^/(.+)/$ /$1 permanent;
    #}

    location /en {

        alias /home/sites/cakein/en/webroot;
        index index.php

        try_files $uri /index.php?$args;

        location ~ ^/en(.*)\.php {

            index index.php;

            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            include /etc/nginx/fastcgi_params;

            fastcgi_param SCRIPT_FILENAME $document_root$1.php;
        }
    }


    location / { 

        root /home/sites/cakein/sk/webroot;

        index index.php index.html;

        try_files $uri /index.php?$args;

        location ~ \.php$ {

            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            include /etc/nginx/fastcgi_params;

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}

如您所见,以下方案中有两个站点:

sk
-- ...
-- webroot
en
-- ...
-- webroot

第一个网站 (sk) 挂载了 '/' URI,运行正常,domain.tld

但所有带有“en”前缀的都失败。domain.tld/en

EN 版本主要存在两个问题

  • “en” 被重定向到“en/”我该如何防止这种情况发生?
  • URL 重写不起作用,因此 domain.tld/en/moribundus 返回 404。

答案1

在同一个块中使用alias和可能会引起问题,因为try_fileslocation长期存在的问题

此外,您的默认行为是发送/en//index.php,这是错误的 URI,应该是/en/index.php

尝试:

location /en {
    alias /home/sites/cakein/en/webroot;
    index index.php
    if (!-e $request_filename) { 
        rewrite ^ /en/index.php last;
    }
    ...
}

编辑:

修复重定向的一个可能方法/en/en/添加另一个location块:

location = /en {
    rewrite ^ /en/ last;
}

相关内容