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
我的目录结构如下:
.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