从apache到nginx url重写(/ *到index.html / $ 1 / $ 2 / *到/$1/$2/index.html)

问题描述 投票:0回答:1

您好,我尝试从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那样进行重写?

.htaccess nginx single-page-application
1个回答
0
投票

尝试这个:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.