.htaccess переписывает корень в подпапку, но приложение подпапки 302 перенаправляет обратно на полный путь

У меня есть стандартный .htaccess RewriteRule, который молча переписывает любой запрос на webroot во вложенную папку, содержащую установку MantisBT. Таким образом, пользователь вводит «example.com», и мой сервер тайно предоставляет им файлы из «example.com/path/to/mantisbt».

Теперь проблема заключается в том, что индексная страница MantisBT немедленно выполняет некоторую логическую маршрутизацию на основе аутентификации и отправляет перенаправление 302 на ПОЛНЫЙ «example.com/path/to/mantis/login», что подрывает мою переписку. Я пытаюсь предоставить всем доступ к моей установке MantisBT, как если бы она находилась в корневом каталоге.

Теперь я знаю, что после перенаправления 302 MantisBT на полный путь я могу перенаправить их СНОВА обратно в webroot. Но перенаправлять людей дважды каждый раз, когда MantisBT выполняет какую-то логику маршрутизации, кажется грязным взломом. Я также знаю, что могу взломать код MantisBT, но я ненавижу переделывать код каждый раз, когда выходит новая версия.

Итак, есть ли способ обмануть MantisBT (или любое другое приложение, если на то пошло), заставив его думать, что он находится в корне, и, следовательно, создавать пути перенаправления на основе URL-адреса, относящегося к веб-корню? Например: «example.com/login» вместо «example.com/path/to/mantis/login».

Я бы предпочел решить эту проблему с помощью метода Apache .htaccess или изменения httpd.conf. Возможно, DocumentRoot или RewriteBase?


person uberdanzik    schedule 02.09.2015    source источник


Ответы (1)


Попробуйте добавить это правило над внутренним правилом перезаписи, которое у вас было раньше.

RewriteCond %{THE_REQUEST} \ /+path/to/mantisbt/([^\?\ ]*)
RewriteRule ^ /%1 [L,R]

это перенаправляет браузер, когда браузер напрямую запрашивает что-либо в /path/to/mantisbt/. Тогда вступит в силу правило о том, что вам уже нужно внутренне переписать в каталог mantisbt.

person Jon Lin    schedule 02.09.2015
comment
Спасибо за ваш ответ. Учитывая флаг [R], это сгенерирует еще одно перенаправление в дополнение к тому, которое MantisBT уже отправил в полное местоположение. Как я уже упоминал выше, я надеялся на решение, не связанное со вторым перенаправлением. Я надеялся, что смогу обмануть MantisBT, заставив его думать, что он находится в корневом каталоге, так что его первоначальное перенаправление уже было нацелено на веб-корень, и истинный путь MantisBT никогда не раскрывается браузеру (даже в перенаправлениях заголовков). - person uberdanzik; 02.09.2015
comment
@uberdanzik Не уверен, почему вы пытаетесь обмануть MantisBT вместо того, чтобы просто настроить его так, чтобы он возвращал ссылки, основанные на корне. Где-то вы настроили его для возврата ссылок типа /path/to/mantisbt/ - person Jon Lin; 02.09.2015