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

Перенаправление виртуального хоста Apache2, за исключением специального пути

Предположим, у нас есть 2 домена.

www.my-domain.com
www.mydomain.com

Стандартно у нас есть перенаправление с .mydomain.com / к .my-domain.com / через

(mydomain.conf)
<Virtualhost *:80>
  ServerName mydomain.com
  ServerAlias mydomain.com *.mydomain.com

  RewriteEngine on
  RewriteCond %{HTTP_HOST} (.+\.)?mydomain\.com(\/.+)?$ [NC]
  RewriteRule (.*) http://%1my-domain.com$2$1 [R=301]
</VirtualHost>

Но теперь, из-за обратной совместимости, у нас есть один специальный URL-адрес «www.mydomain.com/special/task.php», который нужно обслуживать напрямую и не перенаправлять.

Я пытаюсь сделать что-то вроде этого:

(mydomain.conf)
<Virtualhost *:80>
  ServerName mydomain.com
  ServerPath /special/
  DocumentRoot /var/www/special/
</VirtualHost>

<Virtualhost *:80>
  ServerName mydomain.com
  ServerAlias mydomain.com *.mydomain.com

  RewriteEngine on
  RewriteCond %{HTTP_HOST} (.+\.)?mydomain\.com(\/.+)?$ [NC]
  RewriteRule (.*) http://%1my-domain.com$2$1 [R=301]
</VirtualHost>

Но это не сработает. Что я делаю не так или это вообще возможно? Что мне нужно сделать по другому?

Вы должны добавить еще RewriteCond позади вашего существующего, чтобы реализовать это исключение. Как это:

RewriteCond %{REQUEST_URI} !=/special/task.php [NC]

Обратите внимание, что по умолчанию все RewiteConds связаны логическим И. Так что RewriteRule срабатывает, только если все RewriteConds оценивается как истина.