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
on 04.08.2008 13:50
on 04.08.2008 17:06
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
on 04.08.2008 17:21
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? Doug Barth wrote: > 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
on 04.08.2008 18:12
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
on 04.08.2008 19:04
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.
Doug Barth wrote:
> 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