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

Apache Rewrite не перезаписывает, как ожидалось

Я пытаюсь использовать mod_rewrite для перенаправления пользователей на URL-адрес, эквивалентный HTTPS, если этот URL-адрес не предназначен для моего сервера Jenkins CI. Вот правило, которое у меня есть в конфигурации моего сайта по умолчанию (мой Jenkins и другие сайты имеют свои собственные соответствующие VirtualHost записи:

<VirtualHost _default_:80>
    ServerAdmin support@example.com
    RewriteEngine on
    ReWriteCond %{SERVER_PORT} !^443$
    ReWriteCond %{REQUEST_URI} !^.+/jenkins/(.*)$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>

Любая помощь будет принята с благодарностью.

Изменить: по запросу, вот результат apache2ctl -S:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  is a NameVirtualHost
         default server ip-10-72-226-167.ec2.internal (/etc/apache2/sites-enabled/default-ssl:2)
         port 443 namevhost ip-10-72-226-167.ec2.internal (/etc/apache2/sites-enabled/default-ssl:2)
         port 443 namevhost qa.example.com (/etc/apache2/sites-enabled/example-ssl:2)
*:80                   is a NameVirtualHost
         default server ip-10-72-226-167.ec2.internal (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost ip-10-72-226-167.ec2.internal (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost qa.example.com (/etc/apache2/sites-enabled/jenkins:1)
Syntax OK

Я ожидаю, что когда я перейду на http://qa.example.com что меня перенаправляют на https://qa.example.com/, но если я перейду к http://qa.example.com/jenkins/ затем срабатывает моя конфигурация Jenkins. Последний работает, но первый нет, т.е. просматривает http://qa.example.com/ не перенаправляет меня на https://qa.example.com/.

Вместо того, чтобы помещать эти правила в _default_ vhost, поместите их в /etc/apache2/sites-enabled/jenkins vhost, чтобы он мог работать с запросами, сопоставленными с этим именем.

Также - выражение вашего второго RewriteRule никогда не совпадет /jenkins/, поскольку перед ведущей косой чертой требуется хотя бы один символ. Попробуй это:

ReWriteCond %{SERVER_PORT} !^443$
ReWriteCond %{REQUEST_URI} !^/jenkins/.*$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [R,L]