Задать вопрос
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 в настройках, но не знаю как это сделать. За это решение отдельный плюс!

Как можно этот вопрос решить?
  • Вопрос задан
  • 622 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 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,
        ]);
    }
}


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

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

Похожие вопросы