Перенаправление htaccess без ведома пользователя - PullRequest
3 голосов
/ 30 марта 2012

Мы запускаем несколько доменов через один и тот же код, и мы хотим сохранить их изображения в соответствующих папках.Вот что мы делаем.

/ images / www.domain1.com / logo.jpg /images/www.domain2.com/logo.jpg

Теперь я хочу знать, что, возможно ли это в htaccess, что мы переписываем URL-адреса, не подозревая пользователя о чем-либо.Это то, что я хочу, чтобы

<img src="/images/logo.jpg" />

внутренне стал через htaccess

RewriteRule ^images/(.*)$ /images/{HTTP_HOST}/$1 [L,R=301]

Но мой вопрос,

  1. Вышеуказанное перенаправление непрерывно зацикливается
  2. Могу ли я достичь эффекта img, не подозревая ни пользователя, ни администратора?

С уважением,

Хурам

Ответы [ 2 ]

6 голосов
/ 30 марта 2012

Удалите R=301, чтобы просто переписать, а не перенаправить:

RewriteRule ^images/(.*)$ /images/{HTTP_HOST}/$1 [L]

Причина, по которой он постоянно зацикливается, заключается в том, что перенаправление 301 приводит к созданию нового запроса для URL images/www.domain1.com/logo.jpg. Этот URL-адрес также соответствует правилу ^images/(.*)$, поэтому он снова перенаправляется до бесконечности.

Если вы действительно хотите выполнить перенаправление 301 (я подозреваю, что нет, но если бы вы это сделали), вы могли бы решить проблему бесконечного зацикливания, добавив некоторые условия перезаписи, чтобы пропустить перенаправление, если домен уже включен:

RewriteCond {REQUEST_URI} !^images/www.domain1.com/(.*)$
RewriteCond {REQUEST_URI} !^images/www.domain2.com/(.*)$
RewriteRule ^images/(.*)$ /images/{HTTP_HOST}/$1 [L,R=301]
1 голос
/ 31 марта 2012

Вам определенно не следует использовать флаг R, если вы не хотите менять URL в браузере.Однако даже без флага R ваш RewriteRule будет зацикливаться бесконечно, и в итоге вы получите internal server error.Используйте RewriteRule следующим образом:

RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^images/(.*)$ images/%{HTTP_HOST}/$1 [L,NC]

Использует специальную внутреннюю переменную с именем {ENV:REDIRECT_STATUS}, которая устанавливается в 200 после успешного применения правила RewriteRule

...