В настоящее время мы переводим наш сайт на CMS и в процессе этого переходим на другой сервер. На старом сервере есть код, который мы не хотим переносить на новый сервер. Мы хотим, чтобы URL-адреса были одинаковыми, поэтому мы рассматривали (и в настоящее время используем) ProxyPass. Старый сервер фактически делает это для переназначения URL-адресов как общедоступному, так и внутреннему содержимому. В <Proxy>
директива на старом сервере все еще закомментирована и работает нормально.
Я попытался разместить следующее в нескольких местах: внутри директивы виртуального хоста, вне ее и т. Д. Я не получаю ошибок при запуске apache, но это никогда не работает.
ProxyRequests On
Order allow,deny
Allow from all
ProxyVia On
ProxyPreserveHost On
ProxyPass /tester/ http://oldserver.companyname.com/app1/
ProxyPassReverse /tester/ http://oldserver.companyname.com/app1/
Я пробовал несколько примеров, гораздо менее разрешительных, чем этот, гораздо более простых и т. Д.
Apache, похоже, игнорирует tester
, и отправляет его в CMS, которая затем возвращает 404. Мы хотели бы, чтобы тестер замаскировал старый URL-адрес, что мы сейчас делаем на другом нашем компьютере.
У этого конкретного виртуального хоста действительно есть несколько правил перезаписи, и я попытался разместить их до или после. Модули загружаются ранее в httpd.conf. В настоящее время работает apache 2.2.
На данный момент ничего не происходит. Никаких ошибок, никаких журналов (которые я вижу) и т. Д. Как будто правил на самом деле нет.
Я заметил одну вещь - она отлично работает в другой нашей директиве виртуального хоста. Единственное отличие в том, что другой намного меньше и не содержит некоторых правил перезаписи для Wordpress.
Вот пример моего VirtualHost
<VirtualHost *:80>
ServerAdmin webmaster@site.com.local
DocumentRoot /var/www/html/wordpress
ServerName wptest
ServerAlias wptest.site.com.local
ErrorLog /var/log/httpd/wordpress-error-log
CustomLog /var/log/httpd/wordpress-access-log common
ProxyPass /tester http://www.company.com/app1
RewriteEngine On
<IfModule mod_rewrite.c>
#RewriteBase /wordpress/
# Switched the logging on 2/15/13 JMD
RewriteLog "/var/log/httpd/rewrite_log"
RewriteLogLevel 4
# From https://stackoverflow.com/questions/13235180/how-to-remove-trailing-slash-for-folder-index-html-when-index-html-is-stri
# If it's a request to index(.html)
RewriteCond %{THE_REQUEST} \ /(.+/)?index(\.html)?(\?.*)?\ [NC]
# Remove it.
RewriteRule ^(.+/)?index(\.html)?$ /%1 [R=301,L]
RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)\.html$ $1 [R=301,L]
RewriteRule ^/index\.php$ - [L]
RewriteRule ^/css/(.*) /wp-content/themes/our2012/css/$1 [QSA,L]
RewriteRule ^/js/(.*) /wp-content/themes/our2012/js/$1 [QSA,L]
RewriteRule ^/img/(.*) /wp-content/themes/our2012/img/$1 [QSA,L]
RewriteRule ^/font/(.*) /wp-content/themes/our2012/font/$1 [QSA,L]
RewriteRule ^/plugins/(.*) /wp-content/plugins/$1 [QSA,L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
</VirtualHost>
Если ваша CMS использует перезапись модов в .htaccess, domain.com/test может обрабатываться до proxypass.
вы можете подумать об использовании правила перезаписи с флагом [p] вместе с вашими правилами перезаписи wordpress.
(непроверенное правило быстро собрано вместе в качестве примера)
RewriteRule /test/$ http://oldserver.example.com/ [P]
ProxyPassReverse /test/ http://oldserver.example.com/
http://httpd.apache.org/docs/current/rewrite/flags.html#flag_p
Еще одна ссылка с информацией об использовании mod_rewrite для прокси
http://httpd.apache.org/docs/2.2/rewrite/proxy.html