Nginx

刪除尾部斜杠 NGINX 2 站點一個域

  • April 10, 2017

我有以下 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 所吸引,該 URI 工作正常,domain.tld

但所有帶有“en”前綴的東西都失敗了。domain.tld/en

EN版本有兩個主要問題

  • “en”被重定向到“en/”我該如何防止這種情況?
  • URL 重寫不起作用,因此 domain.tld/en/moribundus 返回 404。

由於長期存在的問題,在同一塊中使用aliasand可能會導致問題。try_files``location

此外,您的預設行為是發送/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;
}

引用自:https://serverfault.com/questions/843560