Предположим, у нас есть 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]
Обратите внимание, что по умолчанию все RewiteCond
s связаны логическим И. Так что RewriteRule
срабатывает, только если все RewriteCond
s оценивается как истина.