Redirect 301 and cache

I want my rails app to redirect from no-WWW to WWW domain (for example if I enter example.com/test to redirect to www.example.com/test). I put the following code in the application controller and worked fine:

before_filter :check_uri     def check_uri   if !/^www/.match(request.host)     redirect_to request.protocol + "www." + request.host_with_port + request.request_uri, :status => 301   end     end

But I also do a simple pages_cache and the above code doesn't execute when the page is cache. Is any other way to call the above method from route.rb even when the pages are cached?

Thank you

Move this into your web server configuration.

For Apache it would be this (this wouldn't match foo.domain.com, but you can modify it so it will)

         RewriteEngine On          RewriteCond %{HTTP_HOST} ^domain.com$ [NC]          RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]

-philip

Thank you very much philip, I have also tried this but it seems I have a problem with my dispatch.cgi (I am using fastcgi to deploy).

When I am trying I get this error "Routing Error

No route matches "/dispatch.fcgi" with {:method=>:get}"

Here is my full .htaccess:

AddHandler fcgid-script .fcgi AddHandler cgi-script .cgi Options +FollowSymLinks +ExecCGI

RewriteEngine On RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^"mydomain".com [NC] RewriteRule ^(.*)$ http://www."mydomain".com/$1 [L,R=301]

ErrorDocument 500 /500.html

#ErrorDocument 500 "

Any other suggestions? Thank you

I want my rails app to redirect from no-WWW to WWW domain (for example

if I enter example.com/test to redirect to www.example.com/test). I

put the following code in the application controller and worked fine:

before_filter :check_uri

def check_uri

    if !/^www/.match(request.host)

            redirect_to request.protocol + "www." + request.host_with_port +

request.request_uri, :status => 301

    end

end

But I also do a simple pages_cache and the above code doesn’t execute

when the page is cache. Is any other way to call the above method from

route.rb even when the pages are cached?

Thank you

Yiannis, I have always been able to do this type of configuration within my

hosting service without touching a .htaccess or httpd.conf files. However,

you should be able to do the following for a named virtual host:

<VirtualHost *:80> ServerName www.example.com

ServerAlias example.com *.example.com DocumentRoot /path/to/rails/app/public

I take it that you’re using Passenger but it’s not clear from your original post.

Good luck,

-Conrad

Unfortunately I am using fastCGI to deploy and my hosting doesn't support custom httpd.conf files. I think the only way is within rails or with .htaccess.

Thank you all for the help, I finally make it work as far as I test it (even though I don't totally understand how it works). The htaccess is the following in case someone else need it:

AddHandler fcgid-script .fcgi AddHandler cgi-script .cgi Options +FollowSymLinks +ExecCGI

RewriteEngine On RewriteCond %{HTTP_HOST} ^mydomain.com [NC] RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

ErrorDocument 500 /500.html

#ErrorDocument 500 "