API 或 htaccess 中的模板文件夹重定向

API or template folder redirect in htaccess

我的目录结构如下:

.htaccess
api.php
template/index.html

调用domain.com/api/someendpoint时,请求转发给api.php

# enable apache rewrite engine
RewriteEngine on
# Deliver the folder or file directly if it exists on the server
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_FILENAME} !-d
# Push every request to api.php
RewriteRule ^(.*)$ api.php [QSA]

现在,调用domain.com时,请求应该调用到模板目录中的index.html

RewriteCond %{REQUEST_URI} ^$
RewriteRule . template/index.html [QSA]

这个不行,目录监听一直显示。

获得 index.html 的正确方法是什么?

RewriteCond %{REQUEST_URI} ^$
RewriteRule . template/index.html [QSA]

RewriteRule模式(即.)不必要地匹配所有内容,除了文档根目录。 REQUEST_URI 服务器变量总是以斜杠开头,所以 condition 永远不会匹配。所以,基本上,规则什么都不做

要只重写根,那么您只需要 .htaccess 中的一条规则:

RewriteRule ^$ template/index.html [L]

理想情况下,这将在之前您现有的API重写,尽管这并不重要,因为其他重写不会重写根目录(因为条件限制)。

# Push every request to api.php
RewriteRule ^(.*)$ api.php [QSA]

所有内容 真的应该发送到 api.php,还是像您的示例那样只发送以 /api/ 开头的 URL?至少,你应该使用 + 量词,而不是 *,因为你想排除对文档根的请求(目前,第三个条件是阻止对文档根的请求被重写).

请注意,如果您的 URL 的格式为 /api/someendpoint,并且您要重写为 /api.php,那么您需要确保在 .htaccess 文件的顶部禁用了 MultiViews:

Options -MultiViews