Я пытаюсь перенести часть своего сайта на внешний сервер. Я хочу, чтобы эта часть была доступна через поддомен, но при этом могла применять 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» вместо звездочки, что немного сбивало с толку. Спасибо, что подтолкнули меня в правильном направлении.