.htaccess 根据条件重写为 index.php 或 index.html

.htaccess rewrite to index.php or index.html based on condition

我对 htaccess 不是很好,我试图找到我的问题的答案,但到目前为止运气不好。

所以我有这个 .htaccess 重写:

RewriteCond %{REQUEST_URI} /(api|nova|nova-api)
RewriteRule .* /index.php

效果很好。

该网站是一个 Angular 站点,其中我有由 JS 路由的动态 URL。

因此,如果我打开基域:example.com 效果很好,因为 index.html 已提供服务。

但是如果我打开这样的路由:example.com/example-route。它说 404.

请问我该如何修改.htaccess文件?

RewriteCond %{REQUEST_URI} /(api|nova|nova-api)
RewriteRule .* /index.php

在 API 重写为 index.php 之后,您似乎只需要将请求重写为 index.html 。但是,您应该修改现有规则以添加 L 标志,并且应锚定与请求匹配的正则表达式(尽管 条件 根本不需要,因为 URL 检查应该在 RewriteRule 指令本身中执行。

例如,请尝试以下操作:

# "index.html" needs to take priority when requesting the root directory
DirectoryIndex index.html

# Abort early if request is already "index.html" or "index.php"
RewriteRule ^index\.(html|php)$ - [L]

# Rewrite certain requests to Laravel API
RewriteRule ^(api|nova|nova-api)($|/) index.php [L]

# Rewrite everything else to Angular
# (unless it already maps to a file or directory)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]

由于“主页”已经运行正常,这表明 DirectoryIndex 已在服务器配置中设置正常(并优先考虑 index.html),尽管明确将其设置为 [=12] =](如上)是更优的,如果这就是所需要的。