Для файлов в нескольких подкаталогах /data/
я хотел бы рассматривать их (и файлы внутри них) так, как если бы они находились в корневом каталоге.
Итак,
1) запрос к
/data/foobar/file.png
должен перенаправить браузер на
/foobar/file.png
2) любые запросы к
/foobar/file.png
должен соответственно доставить файл /data/foobar/file.png
, но без перенаправления.
Для
1) У меня работает следующее правило:
RewriteCond %{REQUEST_URI} ^(.*)?data/((foobar|and|some|other|subdirs)/.*)$
RewriteRule .* %1%2 [R=301,L,qsappend]
(я выбрал этот подход, используя RewriteCond
с %x
ссылками, чтобыподкаталог-независимый, как и в моей среде разработки, страница расположена в подкаталоге, а не в действующей системе, где она находится в корне домена.)
и для 2) Следующее правило помогает:
RewriteRule ^((foobar|and|some|other|subdirs)/.*)$ data/$1 [L,qsappend]
Однако эти правила работают, только если я включаю по одному.Если я включу их обоих одновременно, браузер прервет запрос с ошибкой «слишком много перенаправлений».Перенаправление с /data/*
на /*
будет работать, но затем завершится прерванным запросом, точно так же, как вызов URL без /data/*
.
Мне трудно понять, почему это происходит,Было бы совершенно логично, если бы оба правила фактически вызвали перенаправление.Но что касается моего понимания htacccess (и вкладка Network консоли dev, кажется, подтверждает эту концепцию), клиент даже не должен знать для случая 2), что файл на самом деле не существует.Так почему же это все еще учитывается в пределе перенаправления?
Есть ли что-то фундаментальное, что я упускаю?И как мне достичь того, чего я пытаюсь достичь?