Наша команда новичок в Apache. У нас есть приложение SharePoint 2007, которое находится на нашем внутреннем сервере по адресу, который мы назовем http://internal.site.com.
Мы обязаны использовать Apache в качестве обратного прокси-сервера с внешнего сайта на внутренний сервер. внешний сервер находится по адресу, который мы назовем http://external.site.com/appname.
Проблема связана с относительными ссылками SharePoint. ссылки на странице sharepoint могут указывать на «/_layouts/dir/subdir/page.aspx», но при передаче на прокси-сервер эта ссылка отображается на странице как http://external.site.com/_layouts/... (нет / appname добавлено). Итак, похоже, нам нужно перезаписать URL.
Но затем это распространяется и на другие проблемы - относительные URL-адреса в таблицах стилей, javascript и т. Д., Которые генерирует SharePoint (т.е. мы не контролируем их).
SharePoint также создает некоторые URL-адреса в виде "\ u002flayouts \ u002fuserdisp.aspx? Force = True \ u0026ID ="
Пока я думаю, что лучший способ решить эту проблему для каждого URL-адреса (в том числе в таблицах стилей, javascript и т. Д.):
Это может быть правильно или неправильно, и я приветствую ваше мнение о том, как это сделать лучше.
Преследуя эту цель, у меня есть файл конфигурации, который, я уверен, во многих отношениях неверен, но я думаю, что это только начало. Также хотелось бы узнать ваше мнение о том, как лучше реализовать мою идею.
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /appname/ http://internal.site.com/
ProxyPassReverse /appname/ http://internal.site.com/
<Location /appname/>
ProxyHTMLEnable On
ProxyHTMLExtended On
ProxyHTMLLogVerbose On
#List of HTML elements to change
ProxyHTMLLinks a href
ProxyHTMLLinks area href
ProxyHTMLLinks link href
ProxyHTMLLinks img src longdesc usemap
ProxyHTMLLinks object classid codebase
data usemap
ProxyHTMLLinks q cite
ProxyHTMLLinks blockquote cite
ProxyHTMLLinks ins cite
ProxyHTMLLinks del cite
ProxyHTMLLinks form action
ProxyHTMLLinks input src usemap
ProxyHTMLLinks head profile
ProxyHTMLLinks base href
ProxyHTMLLinks script src for
# To support scripting events (with ProxyHTMLExtended On),
# you'll need to declare them too.
ProxyHTMLEvents onclick ondblclick onmousedown onmouseup \
onmouseover onmousemove onmouseout onkeypress \
onkeydown onkeyup onfocus onblur onload \
onunload onsubmit onreset onselect onchange
#Goal: Map any URL that starts with a / (i.e. a relative link) to
http://internal.site.com/
ProxyHTMLURLMap ^/ http://internal.site.com/
</Location>
Заранее благодарим вас за любую помощь, которую вы можете оказать!
Всего наилучшего, Шон
Сложность, с которой вы сталкиваетесь, является типичной: вы хотите получить доступ к веб-приложению, используя путь URI, отличный от ожидаемого приложением. Стандартный прокси-сервер Apache заботится только о ссылках в заголовках (например, Location:
заголовки), но не в содержимом документа, поэтому ссылки, использующие абсолютные пути, такие как /images/foo.png
больше не достигают нужного места (относительные пути обычно работают нормально).
Распространенное решение - использовать mod_proxy_html модуль, который позволит вам выполнять замены в содержании ваших веб-страниц. По факту, этот учебник охватывает именно ту ситуацию, которую вы описали.
Почему бы не сделать это с использованием поддомена, а не папки:
https://efg.site.com скорее, чем https://www.site.com/efg. Вы всегда можете настроить перенаправление из папки, если оно должно начинаться там. Это должно избежать проблемы относительных ссылок.