[Mono-list] IHttpHandler works fine under IIS but not Apache

Peter Hagen peter at wingsofdeath.nu
Fri Apr 3 06:00:34 EDT 2009


Hi Mike

this can also be done by Apache. The easiest way is use mod-rewrite with 
apache. You could create a httphandler with handles these request. For 
example for the page of 'peter':

http://www.yourspace.com/page/peter

But you want the request:

http://www.yourspace.com/peter

With the mod-rewrites you can change the requested url to a different 
one. First add the mod-rewrite module to apache (rewrite.load). Then add 
a .htaccess file to the root of your site, with something like this:

RewriteEngine On
RewriteBase /
RewriteRule ^(.*) /page/$1

It uses regular expressions to find the match ^(.*) and rewrites the 
match to /page/$1. If the rewrite modules works, this should be your 
solution.

Good luck!

Cheers

Peter


Mike Christensen wrote:
> Cool!  I'll use this as well..
> 
> However, what if you wanted to build an app with a dynamic directory 
> structure.  For example, you can create a user account called Peter on 
> MySpace and then go to www.myspace.com/Peter.  However, I'm pretty sure 
> they don't have a directory on the filesystem called Peter, nor an alias 
> for Peter in their Apache config.
> 
> It would be nice to just disable this check, which is why I'm wondering 
> whether this is Apache or mod_mono doing this.  IIS does not have this 
> problem.
> 
> Thanks again!
> Mike
> 
> Peter Hagen wrote:
>> Hi
>>
>> I fixed this by using an alias. I added an alias in the site 
>> configuration, and added the alias path to the web.config:
>>
>> Apache site config
>>
>> Alias /test "/some/real/path/to/my/site/www"
>> <Location /test>
>>   SetHandler mono
>> </Location>
>>
>> Web.config
>>
>> <configuration>
>>   <system.web>
>>     <httpHandlers>
>>       <add verb="*" path="/test/*" 
>> type="Willow.Cms.Common.WebServiceHandler, Willow.Cms.Common" />
>>     </httpHandlers>
>>   </system.web>
>> </configuration>
>>
>> With this configuration you don't need to create the directory
>>
>> Cheers
>>
>> Peter
>>
>>
>> Mike Christensen wrote:
>>> This is already done.
>>>
>>> As I've stated in my email, this works for /Test.foo but not 
>>> /Blah/Test.foo.  Apache requires the physical directory to exist on 
>>> the filesystem, otherwise it returns a 404.
>>>
>>> Ricardo Lopes wrote:
>>>> Hi,
>>>>
>>>> You have to tell apache to send requests to *.foo to mod-mono, check
>>>> your configuration.
>>>>
>>>> 2009/4/3 Mike Christensen <imaudi at comcast.net>:
>>>>  
>>>>> Hi guys - I'm thinking this is most likely either an Apache 
>>>>> limitation,
>>>>> a configuration problem, or a bug in mod-mono.  I'm hoping it's the
>>>>> latter so we can fix it :)
>>>>>
>>>>> Let's say I have an IHttpHandler:
>>>>>
>>>>> public class Handler : IHttpHandler
>>>>> {
>>>>> //Stuff here that will blow your mind
>>>>> }
>>>>>
>>>>>
>>>>> Now I register this in my web.config:
>>>>>
>>>>> <httpHandlers>
>>>>>  <add verb="*" path="*.foo" validate="false" type="Handler" />
>>>>> </httpHandlers>
>>>>>
>>>>> Good so far right?
>>>>>
>>>>> When I go to:
>>>>>
>>>>> /Test.foo
>>>>>
>>>>> My handler will be invoked and it will do all sorts of great things 
>>>>> that
>>>>> you simply can't imagine, probably change the world and all.
>>>>>
>>>>> However if I do:
>>>>>
>>>>> /Blah/Test.foo
>>>>>
>>>>> Then Apache gives me a default 404 File not found error.
>>>>>
>>>>> If I go and create a blank directory on the file system called Blah,
>>>>> things will then work again.  The point is, I do not want Apache or
>>>>> anything else validating the filepath or directory structure.  Keep in
>>>>> mind there's web apps such as SharePoint that allow you to provision
>>>>> webs, subwebs, etc and these paths are completely resolved by HTTP
>>>>> handlers and are totally independent of the filesystem.  Porting this
>>>>> architecture over to Mono might cause problems.
>>>>>
>>>>> My question is what is actually to blame?  Is Apache verifying the
>>>>> directory before passing the request off to mod_mono?  It obviously
>>>>> doesn't validate the file itself since Test.foo doesn't exist anywhere
>>>>> on the filesystem.  I kinda think so because it's an Apache 404 error
>>>>> page I'm getting, which depresses me.  Also, this doesn't happen on 
>>>>> xsp
>>>>> so I blame Apache.  Anything I can do about this?
>>>>>
>>>>> On my app, I can hack around it by creating the directories or maybe
>>>>> doing some hacks with vdirs and stuff, but is there a way we can 
>>>>> provide
>>>>> a better experience?  Thanks!!
>>>>>
>>>>> Mike
>>>>> _______________________________________________
>>>>> Mono-list maillist  -  Mono-list at lists.ximian.com
>>>>> http://lists.ximian.com/mailman/listinfo/mono-list
>>>>>
>>>>>     
>>>>
>>>>
>>>>
>>>>   
>>>
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> Mono-list maillist  -  Mono-list at lists.ximian.com
>>> http://lists.ximian.com/mailman/listinfo/mono-list
>>


More information about the Mono-list mailing list