你好,我尝试从apache迁移到nginx,但我坚持URL重写。
这适用于 NUXT SPA 应用程序。
对于 apache,我使用 .htaccess 来重写 url。
但不幸的是,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;
}
...
但是 url 重写无法按预期工作:例如/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 /index.html;
}
location ~ ^(/[^/]+/[^/]+) {
index index.html index.htm;
try_files $uri $1/index.html =404;
}