我正在从子域名移动到子文件夹。
我有多个国家/地区的多个子文件夹。我在 Magento 管理中更改了域名。但 Nginx 重写似乎不起作用。我的服务器上安装了 1 个 Magento,我想使用 /uk 和 /us。
页面正在加载,但所有页面都出现 404 错误。
我在 Google 上花了很多时间,但找不到可行的配置。希望有人能提供一些线索。
这是我的配置:
server {
listen 443 ssl http2;
root /home/domain_com/public_html/;
server_name www.domain.com/uk;
if ($http_host = cache.domain.com) {
rewrite (.*) https://www.domain.com$1 permanent;
}
if ($http_host = uk.domain.com) {
rewrite (.*) https://www.domain.com/uk$1 permanent;
}
location / {
index index.html index.php;
try_files $uri $uri/ @handler;
expires 30d;
}
location /downloader/ {
allow xx.xx.xx.xx;
deny all;
}
location ~ ^/(app|includes|lib|media/downloadable|pkginfo|report/config.xml|var)/ { internal; }
location /var/export/ { internal; }
location /. { return 404; }
location @handler { rewrite / /index.php; }
location ~* .php/ { rewrite ^(.*.php)/ $1 last; }
location ~* .php$ {
if (!-e $request_filename) { rewrite / /index.php last; }
expires off;
fastcgi_pass domain;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_param MAGE_RUN_CODE ic_uk;
fastcgi_param MAGE_RUN_TYPE website;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
fastcgi_read_timeout 60;
include /etc/nginx/fastcgi_params;
}
}
答案1
你的配置有很多问题。我不知道你在哪里发现的,但我建议你不要再去那里了。
第一的:
location /. { return 404; }
它将匹配除主页之外的所有内容。一开始并不清楚你为什么要这样做。
第二:
server_name www.domain.com/uk;
这显然是无效的,因为/
不能出现在主机名中。将其更改为适当的。
第三:
location @handler { rewrite / /index.php; }
您从 发送了所有非静态资源try_files
,但重写仅匹配 URL 路径/
。因此,您应该再次预期从除主页之外的所有内容获得 404 错误。只需将其更改为 即可轻松修复此问题^
,这将匹配所有内容。
还不清楚为什么不直接从这里传递给 FastCGI location
。其余的都是多余的。
在我看来,这些只是显而易见的问题,它们会完全阻止配置工作。这里还有很多其他不好的做法(例如 的不当使用if
),您也应该稍后清理它们。