在网站的虚拟主机中映射别名 - URL 路由不起作用

在网站的虚拟主机中映射别名 - URL 路由不起作用

我有两个 Laravel 站点:一个首页和一个 API 站点。我的客户稍后会将 API 站点分离到子域中,但目前客户希望从登录页面的“子文件夹”内提供 API(主要是因为他还没有通配符 SSL/TLS 证书)。它应该看起来像这样:

http://example.com - 首页可能包含一些子路由,例如 http://example.com/contact-us

http://example.com/api/- API

我不想将两个项目的代码混合在一起;它们由不同的开发人员维护,因此将文件夹映射为 Apache VirtualHost 似乎是可行的方法。

我做了如下操作:

<VirtualHost *:80>
    DocumentRoot "/sites/front-page/public"

    ServerName somedomain.com
    ServerAlias www.somedomain.com

    <Directory "/sites/front-page/public">
        AllowOverride All
        Require all granted
    </Directory>

    Alias /api "/sites/api/public"

    <Directory "/sites/api/public">
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>

现在当我访问http://example.com/api/它时,它确实index.php从 API 站点调用。但如果我调用它,它会从首页站点http://example.com/api/some-resource调用,并且会失败,出现 404 未找到错误。index.php

我也试过了

AliasMatch "^/api(/|$)(.*)" "/sites/api/public"

但随后,即使http://example.com/api/root 身份也因 Apache 403 禁止页面而失败(http://example.com但其路由工作正常)。

我如何告诉Alias它匹配/api所有子路由并将(.*)部分发送到 Laravel 的路由器?

此外,我很可能必须编辑.htaccess其他站点中的重定向规则以从 URL 中删除该/api部分,然后再将其传递给 Laravel index.php,但我不确定如何正确执行此操作。

如果我做错了,并且有另一种方法可以从同一个域名为两个不同的站点提供服务,我愿意接受建议。

相关内容