我有以下 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_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;
}