Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm trying to use mod_rewrite to redirect users to the HTTPS equivalent URL unless the URL is for my Jenkins CI server. Here is the rule I have in my default site config (my Jenkins and other sites have their own respective VirtualHost entries:

<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>

Any help would be greatly appreciated.

Edit: As requested, here is the output from 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

What I am expecting is that when I browse to http://qa.example.com that I get re-directed to https://qa.example.com/, but if I browse to http://qa.example.com/jenkins/ then my Jenkins config kicks in. The latter works, but the former does not, i.e. browsing to http://qa.example.com/ does not re-direct me to https://qa.example.com/.

share|improve this question
    
Please provide the output from apache2ctl -S. What behavior do you see instead of what's expected? –  Shane Madden May 16 '12 at 3:27
    
Content added. Thanks Shane. –  John S May 16 '12 at 4:03
add comment

1 Answer

up vote 1 down vote accepted

Instead of putting those rules in the _default_ vhost, put them in the /etc/apache2/sites-enabled/jenkins vhost, so that it can work against requests that have been mapped to that name.

Also - the expression on your second RewriteRule won't ever match /jenkins/, since it's requiring at least one character before the leading slash. Try this:

ReWriteCond %{SERVER_PORT} !^443$
ReWriteCond %{REQUEST_URI} !^/jenkins/.*$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [R,L]
share|improve this answer
    
Worked like a charm, thanks Shane! –  John S May 16 '12 at 11:34
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.