javascript - 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>
如果你需要任何其他文件,如果你评论它,我可以编辑这篇文章。
提前致谢!!
解决方案
我假设您的.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
指令将所有请求发送到文档根目录。你需要:
- 删除替换字符串 (
/index.html/
)上的斜杠前缀 - 并删除尾部斜杠。(通常这会导致 404,除非启用了路径信息?)
- 完全删除该
RewriteBase
指令。 <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]
推荐阅读
- xml - 如何在 VBA 中替换 XML 文件的 unicode 字符
- azure-devops - DotNetCoreCL 发布步骤的工作目录参数
- java - Chrome 更新后测试用例失败
- activex - 在不可见的 C++Builder 应用程序中使用 ActiveX
- c - c 和 Julia 中的排序速度
- google-apps-script - 自动将具有特定名称的文件移动到 Google Drive 上的特定文件夹
- sql - 使用强制转换时 - 错误:数字类型的输入语法无效:“”(postgreSQL)
- python-3.x - 在 virtualenv,python3 中没有名为“_bz2”的模块
- go - redis连接失败重试
- c# - X509Certificate2 - 找不到请求的对象