иногда мы делаем копии действующих сайтов на другом сервере для тестирования новых функций. Многие системы CMS жестко кодируют URL-адрес в базе данных, поэтому просто использовать другой URL-адрес невозможно. В наших локальных системах мы просто используем файл hosts для перенаправления запросов на другой IP-адрес. Для наших клиентов это очень сложно, поэтому нам нужен более простой способ. Можно использовать apache (мы используем apache как веб-сервер) в качестве обратного прокси-сервера, поэтому он перенаправляет dev.somedomain.com на anotherdomain.com. Единственная проблема заключается в том, что в исходном HTML-коде есть абсолютные ссылки на anotherdomain.com. Есть ли способ просто позволить apache (или другому программному обеспечению) заменить все ссылки с http (s): //anotherdomain.com на http (s): //dev.somedomain.com на всех страницах (+ js + css)?
Производительность не является проблемой, поскольку она, очевидно, никогда не будет работать в системе, которая используется более чем несколькими людьми.
Спасибо за подсказку для mod_filter. Вроде работает сейчас! У меня была проблема с тем, что сайт использует оба URL с www. и тот без. Моя конфигурация:
<VirtualHost *:801>
ServerName www.dev.domain1.com
ServerAdmin office@domain2.com
SetEnvIf X-Forwarded-Proto https HTTPS=on
FilterProvider gzinflate INFLATE resp=Content-Encoding $gzip
FilterProvider replace SUBSTITUTE Content-Type $text/
FilterProvider gzdeflate DEFLATE Content-Type $text/
FilterChain +gzinflate +replace +gzdeflate
Substitute "s|domain2.com|dev.domain1.com|n"
ProxyPass / http://www.domain2.com/
ProxyPassReverse / http://www.domain2.com/
# ProxyHTMLEnable On
ProxyHTMLURLMap http://www.domain2.com/ /
ErrorLog /var/log/apache2/dev-proxy-error.log
LogLevel warn
CustomLog /var/log/apache2/dev-proxy-access.log combined
</VirtualHost>
А для домена без www
<VirtualHost *:801>
ServerName dev.domain1.com
ServerAdmin office@domain2.com
SetEnvIf X-Forwarded-Proto https HTTPS=on
FilterProvider gzinflate INFLATE resp=Content-Encoding $gzip
FilterProvider replace SUBSTITUTE Content-Type $text/
FilterProvider gzdeflate DEFLATE Content-Type $text/
FilterChain +gzinflate +replace +gzdeflate
Substitute "s|domain2.com|dev.domain1.com|n"
ProxyPass / http://domain2.com/
ProxyPassReverse / http://domain2.com/
# ProxyHTMLEnable On
ProxyHTMLURLMap http://domain2.com/ /
ErrorLog /var/log/apache2/dev-proxy-error.log
LogLevel warn
CustomLog /var/log/apache2/def-proxy-access.log combined
</VirtualHost>
Одного ProxyHTMLURLMap недостаточно, потому что он заменяет только тот же самый домен. на домене с www домен без не будет заменен, и наоборот.
Я надеюсь, что это поможет кому-то. Однако с этим широким фильтром я настоятельно рекомендую не использовать его на производственном сайте!
У Apache есть модуль для этого - он называется mod_filter.
Я не совсем понимаю, чего вы хотите, и моя репутация слишком низка, чтобы оставлять комментарии.
Правильно, у вас такая ситуация:
yourCMS.local
|
|
+ -----------> Создать копию System = dev.yourCMS.local
На вашем "скопированном" сервере веб-сервера возникает такая ситуация:
Пользователь добавляет "dev.yourCMS.local" в браузер, и ваш сервер разработки перенаправляет соединение на URL-адрес yourCMS.local, но на том же сервере (поиск 127.0.0.1)
Если я правильно понимаю, попробуйте это решение:
Добавьте запись в файл хоста (ubuntu / etc / hosts)
# <IP-Adress> <Hostname>
127.0.0.1 yourCMS.local
измените файл конфигурации сайта apache в / etc / apache2 / sites-available / yoursite и добавьте:
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://yourCMS.local
ProxyPassReverse / http://yourCMS.local
Перезагрузите apache
Попытайся
Открыт для других решений и комментариев.