Rewrite problem or routing issue?

I’m not able to access anything in public, everything seems to be going
through the rails router. As a result, I can’t get to stylesheets or
javascript.

I’m not quite clear if this is a .htaccess problem, or a router problem.
I eliminated the “catchall” route, so the last route is

map.connect ‘:controller/:action/:id’

My .htaccess file looks like


General Apache options

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

If you don’t want Rails to look in certain directories,

use the following rewrite rules so that Apache won’t rewrite certain

requests

Example:

RewriteCond %{REQUEST_URI} ^/notrails.*

RewriteRule .* - [L]

Redirect all requests not available on the filesystem to Rails

By default the cgi dispatcher is used which is very slow

For better performance replace the dispatcher with the fastcgi one

Example:

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
RewriteEngine On

If your Rails application is accessed via an Alias directive,

then you MUST also set the RewriteBase in this htaccess file.

Example:

Alias /myrailsapp /path/to/myrailsapp/public

RewriteBase /myrailsapp

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

In case Rails experiences terminal errors

Instead of displaying this message you can supply a file here which

will be rendered instead

Example:

ErrorDocument 500 /500.html

ErrorDocument 500 ‘

Application error

Rails application failed to
start properly’

Any help is appreciated.

ScuzzleButt wrote:

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
RewriteEngine On

If your Rails application is accessed via an Alias directive,

then you MUST also set the RewriteBase in this htaccess file.

Example:

Alias /myrailsapp /path/to/myrailsapp/public

RewriteBase /myrailsapp

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

Looks to me like you’ve told Apache to send EVERYTHING to dispatch.fcgi.
Is there a reason why you’ve made it the first rule, instead of the
last?

–Al Evans

No reason.

I’m assuming by uncommenting

RewriteCond %{REQUEST_URI} ^/notrails.*

RewriteRule .* - [L]

I can somehow direct public/stylesheets and public/javascripts to be
ignored by rails.

I’m not quite sure I understand the rules regarding this, and I haven’t
found any sources that describe it simply.

ScuzzleButt wrote:

No reason.

I’m assuming by uncommenting

RewriteCond %{REQUEST_URI} ^/notrails.*

RewriteRule .* - [L]

I can somehow direct public/stylesheets and public/javascripts to be
ignored by rails.

I’m not quite sure I understand the rules regarding this, and I haven’t
found any sources that describe it simply.

That’s because it’s not simple:-)

See http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

I’m no expert, but it looks to me like your first rule:

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

Tells Apache to match everything and quite evaluating rules.

–Al Evans