Назад | Перейти на главную страницу

Как предотвратить бесконечный цикл перенаправления на 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 var, чтобы при перенаправлении оно не повторялось?

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

Спасибо д

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

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


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

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

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

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

Вы можете попробовать свои силы с 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]

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