Tomcat – 302/301 and 404 redirect issue for apache redirection for tomcat

apache-2.2javaspringframeworktomcat

I'm using Apache HTTPD in front of Apache Tomcat with the following virtual host:

$ cat /etc/apache2/sites-enabled/onlinetaskboarddotcom 
<VirtualHost *:80>
    ServerAdmin comented@out.com
    ServerName www.onlinetaskboard.com
    ServerAlias onlinetaskboard.com
    DocumentRoot /home/ubuntu/www/apache/onlinetaskboarddotcom

    ProxyPass / http://www.onlinetaskboard.com:8080/
    ProxyPassReverse /  http://www.onlinetaskboard.com:8080/

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory /home/ubuntu/www/apache/onlinetaskboarddotcom/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

The URLs without www subdomain like onlinetaskboard.com/login and onlinetaskboard.com/someOtherValidPage work fine, however once I include the www subdomain like www.onlinetaskboard.com, then I get a 404 error in some browsers like Chrome.

Here are the request/response headers which I observed in Chrome.

With www subdomain:

Request:
        Request URL:http://www.onlinetaskboard.com/
        Request Method:GET
        Status Code:404 Not Found
Request headers:
        Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Encoding:gzip,deflate,sdch
        Accept-Language:en-US,en;q=0.8
        Connection:keep-alive
        Cookie:JSESSIONID=DE44F60835D23E6AB3CC2A2E8B9D6279
        Host:www.onlinetaskboard.com
        User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36
Response headers:
        Connection:Keep-Alive
        Content-Encoding:gzip
        Content-Length:377
        Content-Type:text/html;charset=ISO-8859-1
        Date:Thu, 14 Nov 2013 23:39:24 GMT
        Keep-Alive:timeout=5, max=99
        Server:Apache-Coyote/1.1
        Vary:Accept-Encoding
        X-Pad:avoid browser bug

And without the www subdomain:

Request:    
        Request URL:http://onlinetaskboard.com/
        Request Method:GET
        Status Code:302 Found
Request Headers:
        Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Encoding:gzip,deflate,sdch
        Accept-Language:en-US,en;q=0.8
        Cache-Control:max-age=0
        Connection:keep-alive
        Cookie:JSESSIONID=36D1DED5A3F7B5E185FE5D5EDD4457FC
        Host:onlinetaskboard.com
        User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36
Response headers:
        Connection:Keep-Alive
        Content-Length:0
        Date:Fri, 15 Nov 2013 00:04:33 GMT
        Keep-Alive:timeout=5, max=100
        Location:http://onlinetaskboard.com/login
        Server:Apache-Coyote/1.1

How is this caused and how can I solve it?

Best Answer

Is there something validating the URL on the other side? What happens if you just go to ip.address:8080 do you get a 404? I am just wondering if it is something tomcat could be doing.

Also, if you add

"ProxyPreserveHost On"

this will keep the request header so you can pass it to tomcat.

Also, why do you have all of this? cgi-bin and such:

Options FollowSymLinks AllowOverride None

<Directory /home/ubuntu/www/apache/onlinetaskboarddotcom/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Related Topic