您好,我尝试从apache迁移到nginx,但是我坚持使用URL重写。
这是针对NUXT SPA应用程序的。
[对于Apache,我使用.htaccess来重写网址。但是很不幸,nginx上没有htaccess ...
这是预期的结果:
website.com/
---> /index.html
website.com/ch/en
---> /ch/en/index.html
website.com/ch/en/about-us
---> /ch/en/index.html
website.com/ch/en/property/328383
---> /ch/en/index.html
website.com/toto/lala
---> /index.html
website.com/ch
----> /index.html
website.com/_nuxt/file.js
---> /_nuxt/file.js
website.com/data/file.jpeg
---> /data/file.jpeg
请注意,有许多不同的国家和语言,所以我认为手动编写所有重写不是一种选择。
我的文件夹结构如下:
dist/
.htaccess
index.html
_nuxt/
(nuxt generated files)
data/
(static file like image, json, etc...)
ch/
fr/
.htaccess
index.html
de/
.htaccess
index.html
be/
fr/
.htaccess
index.html
...
我的根.htaccess包含:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
并且在我的子文件夹中,例如/ ch / en
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /ch/en
RewriteRule ^index.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /ch/en/index.html [L]
</IfModule>
目前,我尝试在nginx.conf上遵循以下规则
...
location / {
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /$1/$2/ {
index index.html index.htm;
try_files $uri $uri/ /$1/$2/index.html;
}
...
但是重新输入网址无法正常工作:例如/ch/en
的显示效果很好/ch/en/index.html
但/ch/en/mypage
显示为/index.html
,而不是/ch/en/index.html
因此,如何在nginx.conf上像/*
-> /index.html
和/$1/$2/
-> /$1/$2/index.html
那样进行重写?
尝试这个:
error_page 404 /index.html;
location /
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ~ ^(/[^/]+/[^/]+)/ {
index index.html index.htm;
try_files $uri $uri/ $1/index.html =404;
}