neochar
@neochar
PHP vs Python

Как реализовать htaccess прокси для ссылки с работающими iframe и ajax-запросами?

Сейчас ситуация такова: есть домен example.com и страницы товаров, доступные каждый по своему адресу:
- example.com/product-one
- example.com/product-two
- etc

Все эти страницы обрабатываются одним Yii action (в htaccess прописан RewriteRule, который ведёт на index.php?r=sale/product&product_id=%SOME_ID%). У каждого товара есть связка с html-файлом, загруженным на сервер, у которого прописаны относительные пути и поэтому этот html файл грузится на странице товара в IFRAME. Так ресурсы не теряются при относительных путях. События в этом html обрабатываю через jQuery скриптами, прописанными на странице товара, присутствует валидация и ajax-запросы.

Теперь возникла задача прописать отдельный домен для каждого товара. Например:
- product-one.com => example.com/product-one (или example.com/index.php?r=sale/product&id=1)
- product-two.com => example.com/product-two (или example.com/index.php?r=sale/product&id=2)
- etc

Правило прописываю так:
RewriteCond %{HTTP_HOST} ^product-one.com
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) http://example.com/product-one [P]


Проблема в том, что IFRAME в таком случае уже не грузится из соображений безопасности браузера (т.е. я пытаюсь загрузить в iframe одного домена содержимое другого).
Если же я переписываю рендеринг связанного с товаром html напрямую через echo (указывая тег < base > чтобы не терять относительные пути), то появляется ошибка:
XMLHttpRequest cannot load http://example.com/index.php?r=debug%2Fdefault%2Ftoolbar&tag=57cc3a8c22a51. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://detox-plus-monster.local' is therefore not allowed access.


Есть идея попробовать передавать ещё и отдельный домен в качестве параметра в index.php Yii2 и динамически указывать baseUrl в настройках, но не знаю как это сделать. За это решение отдельный плюс!

Как можно этот вопрос решить?
  • Вопрос задан
  • 615 просмотров
Решения вопроса 1
neochar
@neochar Автор вопроса
PHP vs Python
Окей, пока я нашёл только как изменить baseUrl из контроллера так, чтобы не сыпались AJAX-ошибки из-за проблем с безопасностью.

1. Передаю в htaccess GET-параметр baseUrl = product-one.com
2. В контроллере пишу:
public function actionProduct($id, $baseUrl = null)
    if (!empty($baseUrl)
        Yii::$app->set('urlManagerFrontend', [
            'class' => 'yii\web\UrlManager',
            'baseUrl' => $baseUrl,
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
        ]);
    }
}


Пока это рабочее решение. Но всё равно буду благодарен за дополнительные идеи!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы