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

Использование Apache2 mod_proxy на другом сервере, при этом правила .htaccess каким-то образом работают

Я пытаюсь перенести часть своего сайта на внешний сервер. Я хочу, чтобы эта часть была доступна через поддомен, но при этом могла применять RewriteRules (неважно, выполняется ли это с помощью файлов .htaccess или Apache2-.conf, для меня приемлем любой метод)

Я получил:

Server1 with IP 1.1.1.1 and DNS entry "domain1.com"
Server2 with IP 2.2.2.2 and no DNS entry
The target directory on Server2 is "/var/www/html/sub1/"

Всякий раз, когда кто-то запрашивает что-либо вроде «sub1.domain1.com», он должен быть проксирован / перенаправлен на «2.2.2.2/sub1/». Все остальные поддомены останутся на Server1.

Итак, я начал с определения записи VirtualHosts на Server1, говоря:

<VirtualHost sub1.domain1.com:80>
    ServerName sub1.domain1.com
    ProxyPass / http://2.2.2.2/sub1/
    ProxyPassReverse / http://2.2.2.2/sub1/
</VirtualHost>

И это работает для перенаправления всего, что запрашивается через "sub1.domain1.com", на DocumentRoot Сервера2 "/ var / www / html / sub1 /" (хотя я не знаю, откуда он знает, что это DocumentRoot - я не знал '' t определить его), но мои правила .htaccess перестали работать.

На Server1 у меня был файл .htaccess, в котором говорилось что-то вроде:

RewriteEngine on

RewriteBase /sub1

RewriteRule ^aaa$ aaa.php?$1 [QSA,L]
RewriteRule ^bbb$ bbb.php?$1 [QSA,L]
RewriteRule ^ccc$ ccc.php?$1 [QSA,L]

И это сработало отлично, но когда я скопировал его на Server2, он просто не применялся.

Итак, я попытался переместить весь набор правил в запись VirtualHost на Server1 следующим образом:

<VirtualHost sub1.domain1.com:80>
    ServerName sub1.domain1.com
    ProxyPass / http://2.2.2.2/sub1/
    ProxyPassReverse / http://2.2.2.2/sub1/

    <Directory "/var/www/html/sub1">
        AllowOverride All
        Allow from All

        RewriteEngine on

        RewriteBase /sub1

        RewriteRule ^aaa$ aaa.php?$1 [QSA,L]
        RewriteRule ^bbb$ bbb.php?$1 [QSA,L]
        RewriteRule ^ccc$ ccc.php?$1 [QSA,L]
    </Directory>

</VirtualHost>

Но до сих пор не применяется.

Конечная цель - перенаправить запросы типа "http://sub1.domain1.com/aaa/ (...)"к"http://sub1.domain1.com/aaa.php? (...)", получая все эти данные из каталога Server2" /var/www/html/sub1/(...)/ ".

Теперь он работает. Мне пришлось добавить следующую запись VirtualHost перед моей фактической записью «sub1» в моем 000-default.conf на Server2:

<VirtualHost *:80>
    ServerName domain1.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    <Directory "/var/www/html">
        AllowOverride All
        Allow from All
    </Directory>

</VirtualHost>

Звездочка была важна для включения mod_rewrite во всех каталогах, и теперь он, наконец, работает. На Server1 мне пришлось использовать «domain1.com» вместо звездочки, что немного сбивало с толку. Спасибо, что подтолкнули меня в правильном направлении.