Как предотвратить бесконечный цикл перенаправления на 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]
Но я не уверен, работает ли он... (мне никогда не приходилось использовать эту функцию.)