Обслуживание API с другого сайта позади первого - PullRequest
0 голосов
/ 15 октября 2019

У меня есть старое решение на основе Drupal 7 и новое на основе Drupal 8. Оба предоставляют API для своих мобильных приложений. (URL-адреса могут быть легко различимы) Чтобы обеспечить плавную миграцию для пользователей, я хочу, чтобы старое решение работало в том виде, в каком оно есть, и обслуживать за ним новую версию API, оно имеет очевидную разницу в шаблонах, таких как / oauth / token, / api / v1/ , /api/v2/.

Я пробовал разные способы настройки apache с разными результатами, но не совсем то, что мне нужно. Я попробовал: Настройка виртуальных хостов вместе с Alias;Изменение DocumentRoot на / var / www (где у меня есть docroot и docroot-new). Конфигурирование .htaccess различными способами

<VirtualHost *:80>
    ServerName ${APACHE_SERVERNAME}
    ServerAlias test.*
    DocumentRoot /var/www/docroot/
  #this is example with phpinfo, works well
    Alias "/info.php" "/var/www/docroot-new/"
    #Just to simplify I'm trying to serve only one API endpoint from    
    new solution
    Alias /api/v1/mobile-ui/ "/var/www/docroot-new/"
    #And auth endpoint
    Alias "/oauth/token/" "/var/www/docroot-new/"
</VirtualHost>

<Directory "/var/www/docroot/">
   DirectoryIndex index.php
   Options Indexes FollowSymLinks
   AllowOverride All
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

<Directory "/var/www/docroot-new/">
   DirectoryIndex index.php
   Options Indexes FollowSymLinks
   AllowOverride All
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

В этом случае старое решение обслуживается хорошо, но новое не можетбыть соответствующим образомЕсли я изменю DocumentRoot на / var / www /, то они оба будут работать хорошо, но, очевидно, с именем dir в URL. Я думаю, что .htaccess может помочь мне здесь, но я не эксперт и не могу найти решение. Я также включаю ведение журнала добавления для apache и могу проверять такие детали, как соответствие mod_rewrite (на самом деле это не очень полезно для меня)

1 Ответ

0 голосов
/ 16 октября 2019

итак, я сам нашел решение. Это даже лучше, чем предыдущие мысли. Просто проксирование запросов.

ProxyPassMatch "/api(.*)"  "http://new-solution.local/api$1"
ProxyPassReverse "/api(.*)"  "http://new-solution.local/api$1"

ProxyPass "/oauth/token"  "http://new-solution.local/oauth/token"
ProxyPassReverse "/oauth/token"  "http://new-solution.local/oauth/token"

Надеюсь, это поможет кому-то решить подобную проблему.

...