我正在尝试从api.domain.net
到domain.net/api
的所有流量进行内部重写(不是重定向)。
我有一个VHost处理domain.net
。此端点支持
/api
子目录作为API的入口点。
我想设置另一个端点api.domain.net
,最好是另一个处理API流量的VHost。在这种情况下,我不想使用/api
子目录,因为域意味着这是一个API。
我的项目已经在使用.htaccess
来重写index.php
的所有流量,因为所有请求都是由PHP路由的。规则:RewriteRule ^(.*)$ /index.php [L,END]
理想情况下,我想将新的API重写规则添加到VHost配置中,因为API和非API客户端的代码(和.htaccess)应该相同。
解决这个问题的最佳方法是什么?
我试图在index.php
中添加一条规则(.htaccess
规则之前)只是为了测试:RewriteRule ^(.*)$ /api/$1
,但由于某种原因,它没有做任何事情。
一旦添加,我就预计所有流量,例如:https://local.domain.net/api_method
将被PHP视为源自https://local.domain.net/api/api_method
,因此路由正确。
EDIT。
.htaccess
看起来像那样(剥离不相关的东西):
RewriteEngine on
# Allow the Let's Encrypt cert verification
RewriteRule ^.well-known/ - [L,NC]
Options +FollowSymlinks
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^build/js/.*\.js$ - [NC,L]
# Run all non-file-asset requests through site entry point
RewriteCond %{REQUEST_URI} !^/resources/frontend/(images|swf|ttf) [NC]
RewriteRule ^(.*)$ /index.php [L,END]
答案 0 :(得分:0)
<VirtualHost *>
ServerName api.example.com
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI}/ api
RewriteRule ^(.*) http://www.example.com/%{REQUEST_URI} [R=301,NC]
</VirtualHost>
这应该这样做