【问题标题】:Laravel 5.8 use subdomain as API endpoint beside domain.com/apiLaravel 5.8 在 domain.com/api 旁边使用子域作为 API 端点
【发布时间】:2019-12-23 06:27:28
【问题描述】:

我有一个带有一些 API 端点的生产服务器。我只想制作一个更漂亮的系统,将所有 API 调用从 domain.com/api/v1/xxxxxx 移动到像 api.domain.com/v1/xxxxxx 这样的子域

现在,我只是在 cPanel 上创建子域:api.domain.com 然后将该子域指向 laravel 的 public_html 文件夹(我为 public -> public_html 重命名了????)

然后在api.php中添加路由映射域:

//SubDomain Mapping
Route::group(['domain' => 'api.bachecubano.com'], function () {
    Route::group(['prefix' => 'v1'], function () {
        Route::get('categories', 'Api\AdController@get_categories')->name('api_get_categories');
    });
});

然后在api.domain.com/v1/xxx 尝试它,但给我错误。所以工作解决方案是api.domain.com/api/v1/xxx

但是它太丑了,我需要删除第二个/api/ url参数。

我该怎么做?

PS:将子域映射到public_html/api,但这显然会崩溃并出现错误500。

我的想法告诉我,解决方案可能在 .htaccess 文件中,但 In 对此了解不多。

谢谢

【问题讨论】:

    标签: php laravel apache .htaccess


    【解决方案1】:

    在apache中使用.htaccess,可以添加这个。

        RewriteCond %{HTTP_HOST} ^api.(bachecubano.com)$
        RewriteRule ^/?(.*)$ https://%1/api/$1 [L,R]
    

    它将对 api 子域的任何调用重定向到内部域/api。

    【讨论】:

      【解决方案2】:

      您可以通过从 RouteServiceProvider 的 mapApiRoutes() 方法中删除 prefix('api') 来移除默认的 api 前缀,如下所示:

      App\Providers\RouteServiceProvider.php

      protected function mapApiRoutes()
      {
          // prefix('api) has been deleted
      
          Route::middleware('api')
               ->namespace($this->namespace)
               ->group(base_path('routes/api.php'));
      }
      

      至于 api 子域,我会将其停放在主域之上。那么你就不用担心它指向哪个目录了。

      【讨论】:

      • 是的,我考虑了一下,这是正确的答案,但我只是想用.htaccess映射或内部重定向?
      猜你喜欢
      • 2020-01-30
      • 2019-10-18
      • 2020-11-29
      • 1970-01-01
      • 2021-06-22
      • 2015-04-10
      • 2019-11-11
      • 1970-01-01
      • 2017-04-22
      相关资源
      最近更新 更多