盖茨比动态路由 404 构建
Gatsby Dynamic Routing 404 build
我正在使用 Gatsby 和 Strapi 构建一个网站。
我正在使用 dynamic routes.
有了gatsby develop
,一切都很好。
在 gatsby build
中, 页面之间的链接正常,但输入 URL 会出现 404。
示例:我可以通过单击从 /
转到 /room
,但是当我键入 /room
时,我得到 404。
我该如何解决这个问题?我是不是遗漏了什么?
index.js路由部分:
<Router basepath="/">
<Doors path="/" exitTransition={exitTransition}></Doors>
<Room path="/room" exitTransition={exitTransition}></Room>
<Sound path="/sound" sounds={sounds} currentSoundIndex={currentSoundIndex} setCurrentSoundIndex={setCurrentSoundIndex} audioPlayerRef={audioPlayerRef}></Sound>
<Cloakroom path="/cloakroom" clothes={clothes}></Cloakroom>
{clothesRoutes}
</Router>
盖茨比-node.js
exports.onCreatePage = ({ page, actions }) => {
const { createPage } = actions
if (page.path === `/`) {
page.matchPath = `/*`
createPage(page)
}
}
注意: 本地 http 服务器构建正在运行。但在我客户的托管服务器上却不是。
我正在使用 @reach/router.
的路由器
非常感谢您的帮助!
我解决了。
我只需要在 public 目录中放置一个 .htaccess
文件,内容如下:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
扩展 @Antbarras 提出的解决方案。 .htaccess
一定不能 放在 public 文件夹中,因为它是一个自动生成的目录,它在每个构建中都会被覆盖,所以如果你在那里放置任何文件,它将是在下一个版本中丢失,因为源代码没有它。
在public文件夹中添加永久.htaccess
的方法是通过static folder,这是一个将其内容克隆到/public
文件夹中的文件夹保持内部结构。所以:
- 在项目的根目录下创建一个
/static
文件夹
- 在第一层添加
.htaccess
我正在使用 Gatsby 和 Strapi 构建一个网站。 我正在使用 dynamic routes.
有了gatsby develop
,一切都很好。
在 gatsby build
中, 页面之间的链接正常,但输入 URL 会出现 404。
示例:我可以通过单击从 /
转到 /room
,但是当我键入 /room
时,我得到 404。
我该如何解决这个问题?我是不是遗漏了什么?
index.js路由部分:
<Router basepath="/">
<Doors path="/" exitTransition={exitTransition}></Doors>
<Room path="/room" exitTransition={exitTransition}></Room>
<Sound path="/sound" sounds={sounds} currentSoundIndex={currentSoundIndex} setCurrentSoundIndex={setCurrentSoundIndex} audioPlayerRef={audioPlayerRef}></Sound>
<Cloakroom path="/cloakroom" clothes={clothes}></Cloakroom>
{clothesRoutes}
</Router>
盖茨比-node.js
exports.onCreatePage = ({ page, actions }) => {
const { createPage } = actions
if (page.path === `/`) {
page.matchPath = `/*`
createPage(page)
}
}
注意: 本地 http 服务器构建正在运行。但在我客户的托管服务器上却不是。 我正在使用 @reach/router.
的路由器非常感谢您的帮助!
我解决了。
我只需要在 public 目录中放置一个 .htaccess
文件,内容如下:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
扩展 @Antbarras 提出的解决方案。 .htaccess
一定不能 放在 public 文件夹中,因为它是一个自动生成的目录,它在每个构建中都会被覆盖,所以如果你在那里放置任何文件,它将是在下一个版本中丢失,因为源代码没有它。
在public文件夹中添加永久.htaccess
的方法是通过static folder,这是一个将其内容克隆到/public
文件夹中的文件夹保持内部结构。所以:
- 在项目的根目录下创建一个
/static
文件夹 - 在第一层添加
.htaccess