首页 > 解决方案 > Nextjs 静态导出重定向问题

问题描述

我在 Next.js 应用程序中重定向时遇到问题。

我做了静态导出(next build && next export)。

该应用程序的主机位于子目录中(https://www.myhost.com/subdirectory/**[index.html here]**),所以我basePath: '/subdirectory'next.config.js. 一切都一见钟情。

在应用程序内重定向工作正常。但是当用户刷新另一个页面上的页面然后索引时 - 假设页面被命名为页面(https://www.myhost.com/subdirectory/subpage),该站点不会将用户重定向到子页面,而是转到https ://www.myhost.com/(甚至不是项目所在的子目录)。

我非常感谢有人的帮助。

这是.htaccess文件。

<IfModule mod_rewrite.c>

  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteRule . /index.html/ [L]

</IfModule>

如果你需要任何其他文件,如果你评论它,我可以编辑这篇文章。

提前致谢!!

标签: javascript.htaccessredirectnext.js

解决方案


我假设您的.htaccess文件位于/subdirectory/.htaccess. 这些指令的编写方式就好像应用程序位于文档根目录中,而不是子目录中。

<IfModule mod_rewrite.c>

  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteRule . /index.html/ [L]

</IfModule>

最后一个RewriteRule指令将所有请求发送到文档根目录。你需要:

  1. 删除替换字符串 ( /index.html/)上的斜杠前缀
  2. 并删除尾部斜杠。(通常这会导致 404,除非启用了路径信息?)
  3. 完全删除该RewriteBase指令。
  4. <IfModule>不需要包装器。

考虑到上述几点,请尝试以下操作:

# /subdirectory/.htaccess

RewriteEngine On

RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . index.html [L]

推荐阅读