Мы пытаемся перезаписать в другую папку, если файл не существует в корне документа, но существует в другой папке.
Другая папка находится в совершенно другом месте, которое находится с помощью «Псевдонима» в vhosts.
Итак, что у нас есть (из этого поста Как переписать URI из корня, если файл существует в папке?) является:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/legacy/
RewriteRule ^(.*)$ legacy/$1 [QSA,L]
В определенной степени это работает, но, похоже, направляет все в устаревшую папку, а не только тогда, когда файл не существует в первом месте, а существует в устаревшей папке.
Заранее спасибо за любую помощь, Джек.
В вашем черновике первый RewriteCond проверяет, существует ли веб-страница в корне, но не проверяется, существует ли веб-страница в альтернативной папке, поэтому слишком много перенаправляется. (Второй RewriteCond, по-видимому, является либо своего рода проверкой анти-петли [которая не работает, потому что это внутреннее перенаправление, а не внешнее перенаправление], либо своего рода прямой доступ к альтернативному каталогу [который в зависимости от вашего использования может даже не будет хорошей идеей]).
Такая простая вещь кажется удивительно сложной для реализации. Лучшее, что я смог найти (надеюсь, кто-то другой знает лучше):
# parse the current local filename into parts we can manipulate
# (weird construct and regex in first RewriteCond are because
# mod_rewrite never does any variable substitution on the righthand side)
RewriteCond %{DOCUMENT_ROOT},%{REQUEST_FILENAME} ^([^,]*),\1/*(.*)/+(.*)$
RewriteRule ^ - [E=CURPATH:/%2,E=CURNAME:%3]
# allow direct access to the alternate folder
# (omit this entire ruleset if that's not desired)
RewriteCond %{ENV:CURPATH} !^/*legacy(?:/|$)
RewriteRule ^ - [L]
# do the checks and make the change if necessary
RewriteCond %{DOCUMENT_ROOT}/%{ENV:CURPATH}/%{ENV:CURNAME} !-f
RewriteCond %{DOCUMENT_ROOT}/legacy/%{ENV:CURPATH}/%{ENV:CURNAME} -f
RewriteRule ^ /legacy/%{ENV:CURPATH}/%{ENV:CURNAME} [L]
(Обратите внимание, что это немного больше, чем просто решение вашей заявленной проблемы. Он также пытается быть более общим: работа во всех подкаталогах, работа даже при удвоении косой черты и работа на разных Apache с слегка разными конфигурациями.)