Как предотвратить бесконечный цикл перенаправления на htaccess?

Наш domain.com/app/index.php загружает domain.com/blog в iframe.

Так что мои правила перенаправления должны быть такими:

- domain.com/              => /app/index.php
- domain.com/blog(.*)      => /app/index.php?(.*)

Второе правило заключается в том, что если кто-то хочет перейти в блог напрямую, мы сначала запускаем наше приложение, помещаем блог в iframe и добавляем входящую строку запроса в тег iframe src, чтобы он открывался не на своей домашней странице, а по запрошенному URL-адресу.

Проблема в том, что, поскольку я перенаправляю все по моему первому правилу, iframe заканчивается бесконечным циклом. Он пытается бесконечно помещать себя в другой iframe в свой собственный iframe.

Есть ли способ назначить переменную Env, чтобы при повторном перенаправлении оно не повторялось?

Или, чтобы четко решить проблему, я не хочу, чтобы блог открывался без приложения. Каким должен быть мой htaccess?

Спасибо д

PS: мы хотим сделать это на htaccess, так как перенаправления php+js неэффективны и безобразны.

4 ответа

Вы можете изучить директиву RewriteCond для условного применения RewriteRule. Однако это не должно быть строго необходимо, если ваш RewriteRule явно соответствует началу и концу ожидаемого URL для перенаправления, например


RewriteRule ^/$ /app/index.php [L]

Обратите внимание, что перенаправление может быть внутренним или внешним. Если вы явно предоставите [R] установите флажок для вашего RewriteRule, после чего браузер будет проинформирован о новом URL для загрузки. В противном случае Apache попытается извлечь переписанное правило изнутри, не сообщая браузеру о действительном URL-адресе.

Наконец, вы можете использовать директивы mod_rewrite (RewriteEngine, RewriteCond, RewriteRule) в вашем .htaccess файл.

Я опубликовал учебник об избежании бесконечных циклов, который может оказаться полезным. Существует большая проблема при создании правил перезаписи для URL без косой черты. Я надеюсь, что это дает вам понимание. -Scout

Вы можете попробовать свои шансы с mod_rewrite. С чем-то вроде этого в.htaccess:

RewriteEngine On

RewriteRule /blog/(.*) /app/index.php?$1 [R]
RewriteRule ^index.php$ /app/index.php [R]

В теории уже есть env var, который делает эту работу:

RewriteCond     %{ENV:REDIRECT_STATUS}          200
RewriteRule     .*              -               [L]

Но я не уверен, работает ли он... (мне никогда не приходилось использовать эту функцию.)

Другие вопросы по тегам