Nginx
刪除尾部斜杠 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 所吸引,該 URI 工作正常,domain.tld
但所有帶有“en”前綴的東西都失敗了。domain.tld/en
EN版本有兩個主要問題
- “en”被重定向到“en/”我該如何防止這種情況?
- URL 重寫不起作用,因此 domain.tld/en/moribundus 返回 404。
由於長期存在的問題,在同一塊中使用
alias
and可能會導致問題。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; }