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

Использование apache ProxyPass для перенаправления URL-адреса с нового сайта на старый веб-сервер

В настоящее время мы переводим наш сайт на 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>

(перекрестно из StackOverflow по запросу)

Если ваша 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