Apache2内部从子域重写到子目录

时间:2018-03-15 09:26:52

标签: php apache .htaccess vhosts

我正在尝试从api.domain.netdomain.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]

1 个答案:

答案 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>

这应该这样做