Назад | Перейти на главную страницу

Как заменить часть URL-запроса перед проксированием в apache 2.4?

Я пытаюсь переписать часть URL (https://myfirstdomain.com/lool/https:/alf.mydomain.com/service/wopi/files/uuid?query_params) до того, как произойдет проксирование, и у меня есть этот соответствующий раздел в моем виртуальном хосте SSL по умолчанию:

 <IfModule mod_rewrite.c>
    RewriteEngine   On
    LogLevel debug rewrite:trace3

    RewriteRule ^lool/https:/alf.mydomain.com\/(.*) lool/https://alf.mydomain.com/$1 [QSA,NE]
</IfModule>

ProxyPass               /       https://localhost:2323/
ProxyPassReverse        /       https://localhost:2323/

и я вижу это в журналах перезаписи:

applying pattern '^lool/https:/alf.mydomain.com' to uri '/lool/https:/alf.mydomain.com/service/wopi/files/uuid

но в службе, которая получает это, я вижу, что URL-адрес не был переписан. Буду признателен за любые подсказки относительно того, что я делаю неправильно. Я по сути пытаюсь добавить лишнее / который был удален прокси-сервером где-то в инфраструктуре, к которой у меня нет доступа.

РЕДАКТИРОВАТЬ: в журналах серверной службы WOPI он видит URL-адрес запроса неизмененным:

Request from 127.0.0.1:42035: GET /lool/https:/alf.mydomain.com/service/wopi/files/uuid
RewriteRule ^lool/https:/alf.mydomain.com\/(.*) lool/https://alf.mydomain.com/$1 [QSA,NE]

При использовании в виртуальный хост контекст, RewriteRule шаблон соответствует полному URL-пути, включая префикс косой черты (удаляется только в каталог контекст).

Вместо этого попробуйте что-нибудь вроде следующего:

RewriteRule ^/lool/https:/(alf\.mydomain\.com/.*) /lool/https://$1 [PT,NE]

Префикс косой черты также требуется на замена при использовании в контексте виртуального хоста, чтобы указать относительный URL-путь корня документа.

Я только что расширил захваченный шаблон, включив имя хоста, чтобы сохранить повторение в замена.

Буквальные точки следует избегать в RewriteRule шаблон. В то время как слэши (/) не нужно экранировать.

В QSA здесь не нужен, так как вы не указываете строку запроса в замена.

Вы можете или не можете нуждаться в PT (passthrough), чтобы его подхватил mod_proxy.

Вам также следует удалить <IfModule mod_rewrite.c> оболочка - если это не предназначено для работы без mod_rewrite? В противном случае вы просто замаскируете ошибки, когда mod_rewrite недоступен.