Apache, mongrel and slash in route variable

1 view
Skip to first unread message

Petr Chelcicky

unread,
Aug 4, 2008, 7:50:14 AM8/4/08
to rubyonrails...@googlegroups.com
Hi,
in my app i'm ussing this route mapping map.connect
":controller/:action/view/:file" where :file can have another slash
inside (eg. /config/basics/view/some_folder/another_file) . While
accesing this link in FF3 adress panel its shown like
/config/basics/view/some_folder%2Fanother_file. Under mongrel it works
well, but when I connect mongrel to apache it shows "Not Found" error
page.
I'm on windows, apache 2.2, using configuration of vrtual hosts:

<VirtualHost *:80>
ServerName yourdomain.com
DocumentRoot D:/myapp/public
<Directory "D:/myapp/public">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
# Configure mongrel instances
<Proxy balancer://mongrel_cluster>
BalancerMember http://127.0.0.1:4001
BalancerMember http://127.0.0.1:4002
BalancerMember http://127.0.0.1:4003
BalancerMember http://127.0.0.1:4004
BalancerMember http://127.0.0.1:4005
</Proxy>
RewriteEngine On
# Uncomment for rewrite debugging
#RewriteLog logs/your_app_deflate_log deflate
#RewriteLogLevel 9
# Check for maintenance file and redirect all requests
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ /system/maintenance.html [L]


# Rewrite index to check for static
RewriteRule ^/$ /index.html [QSA]
# Rewrite to check for Rails cached page
RewriteRule ^([^.]+)$ $1.html [QSA]
# Redirect all non-static requests to cluster
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]
# Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Uncomment for deflate debugging
#DeflateFilterNote Input input_info
#DeflateFilterNote Output output_info
#DeflateFilterNote Ratio ratio_info
#LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)'
deflate
#CustomLog logs/your_app_deflate_log deflate
ErrorLog logs/your_app_error_log
CustomLog logs/your_access_log combined
</VirtualHost>

I've just followed some tutorials with this configuration and in fact I
really don't know what I was doing there, so any help with that will be
great. :-) I think I need to add some rule for mod_rewrite, but for now
I really know nothing about it.
Is there any chance to get it working, or only way to do it is to
rewrite my app to not using slashes in route variables?

thanks
--
Posted via http://www.ruby-forum.com/.

Doug Barth

unread,
Aug 4, 2008, 11:05:41 AM8/4/08
to Deploying Rails
You need to configure Apache to allow encoded slashes. By default, it
does not allow them.

http://httpd.apache.org/docs/2.2/mod/core.html#allowencodedslashes

--
Doug Barth

Petr Chelcicky

unread,
Aug 4, 2008, 11:21:44 AM8/4/08
to rubyonrails...@googlegroups.com
wow. Thank you very much, but I'm affraid it isn't that simple.. I've
added it to my virtualhosts configuration:

<VirtualHost *:80>
AllowEncodedSlashes On
ServerName yourdomain.com
.
.
.

and now it shows Rails 404 instead of Apache 404...

Any ideas?

--
Posted via http://www.ruby-forum.com/.

Doug Barth

unread,
Aug 4, 2008, 12:12:14 PM8/4/08
to Deploying Rails
What error are you getting in your Rails log file? If it's a routing
error, you may need to specify that the :file portion of your route
can contain pretty much anything.

map.connect ":controller/:action/view/:file", :requirements =>
{:file => /.*/}

--
Doug Barth

Petr Chelcicky

unread,
Aug 4, 2008, 1:04:59 PM8/4/08
to rubyonrails...@googlegroups.com
Yop that was true. :-)

This add screwed up this route
map.connect ":controller/:action/edit/:file/:id",
:mode => "edit",
:requirements => {:file => /.*/},
:file => nil,
:id => nil

But splitting it to
map.connect ":controller/:action/edit/:id/:file",
:mode => "edit",
:requirements => {:file => /.*/, :id => /\d+/},
:file => nil
map.connect ":controller/:action/edit/:file",
:mode => "edit",
:requirements => {:file => /.*/},
:file => nil

has done the work, and now everything seems to work well.

Once again, thank you very much for fast help.

--
Posted via http://www.ruby-forum.com/.

Reply all
Reply to author
Forward
0 new messages