You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by "N.J. Thomas" <nj...@ayvali.org> on 2007/03/05 17:49:20 UTC

[users@httpd] mod_rewrite nocase loop problem

We have this working URL:

    http://example.org/BAR/

We would like to make the path portion of the URL case insensitive, so
that the following:

    http://example.org/bar/
    http://example.org/Bar/
    http://example.org/bAr/

Would all go back to the original URL. Using mod_rewrite, I tried applying
the following rule:

    RewriteRule ^/bar/$ /BAR/ [R=301,L,nocase]

But that creates a redirect loop that the browser barfs on. The browser itself says this:

    The page isn't redirecting properly

    Firefox has detected that the server is redirecting the request for this
    address in a way that will never complete.

    * This problem can sometimes be caused by disabling or refusing to accept cookies.

And the logs show this:

    111.222.333.444 - - [05/Mar/2007:11:39:55 -0500] "GET /bar/ HTTP/1.1" 301 352
    111.222.333.444 - - [05/Mar/2007:11:39:55 -0500] "GET /BAR/ HTTP/1.1" 301 352
    111.222.333.444 - - [05/Mar/2007:11:39:55 -0500] "GET /BAR/ HTTP/1.1" 301 352
    111.222.333.444 - - [05/Mar/2007:11:39:55 -0500] "GET /BAR/ HTTP/1.1" 301 352
    111.222.333.444 - - [05/Mar/2007:11:39:55 -0500] "GET /BAR/ HTTP/1.1" 301 352
    ...

I sort of see why the loop is happening, but it is my understanding that
the L flag would cause it to stop.

Any help on how to fix this would be greatly appreciated.

thanks,
Thomas

---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] mod_rewrite nocase loop problem

Posted by Nick Kew <ni...@webthing.com>.
On Mon, 5 Mar 2007 11:49:20 -0500
"N.J. Thomas" <nj...@ayvali.org> wrote:


>     http://example.org/bar/
>     http://example.org/Bar/
>     http://example.org/bAr/
> 
> Would all go back to the original URL. Using mod_rewrite, I tried
> applying the following rule:
> 
>     RewriteRule ^/bar/$ /BAR/ [R=301,L,nocase]
> 
> But that creates a redirect loop that the browser barfs on.

Not if you put it behind a case-sensitive rewritecond.

> I sort of see why the loop is happening, but it is my understanding
> that the L flag would cause it to stop.

The [L] is working fine.  Your rule is applied correctly,
exactly once per request.

Glad to see you're implementing a cache-friendlier solution
than mod_speling or a simple AliasMatch.  But it still raises
the question: why are requests for incorrectly capitalised URLs
coming in the first place?

-- 
Nick Kew

Application Development with Apache - the Apache Modules Book
http://www.apachetutor.org/

---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] RESOLVED: mod_rewrite nocase loop problem

Posted by "N.J. Thomas" <nj...@ayvali.org>.
* Joshua Slive <jo...@slive.ca> [2007-03-05 12:37:43 -0500]:
> >    RewriteRule ^/bar/$ /BAR/ [R=301,L,nocase]
> >
> > that creates a redirect loop that the browser barfs on.
> 
> RewriteCond %{REQUEST_URI} !^/BAR
> RewriteRule ^/bar/$ /BAR/ [R=301,L,nocase]
> 
> The first line skips the rewrite if the case is already correct.

Thank you, that fixed it.

Thomas

---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] mod_rewrite nocase loop problem

Posted by Joshua Slive <jo...@slive.ca>.
On 3/5/07, N.J. Thomas <nj...@ayvali.org> wrote:
> We have this working URL:
>
>     http://example.org/BAR/
>
> We would like to make the path portion of the URL case insensitive, so
> that the following:
>
>     http://example.org/bar/
>     http://example.org/Bar/
>     http://example.org/bAr/
>
> Would all go back to the original URL. Using mod_rewrite, I tried applying
> the following rule:
>
>     RewriteRule ^/bar/$ /BAR/ [R=301,L,nocase]
>
> But that creates a redirect loop that the browser barfs on. The browser itself says this:

>
> I sort of see why the loop is happening, but it is my understanding that
> the L flag would cause it to stop.

L flag is for internal rewriting.  With an external redirect, each
request looks completely new to apache.  There are lots of ways to
solve this.  Here's one:

RewriteCond %{REQUEST_URI} !^/BAR
RewriteRule ^/bar/$ /BAR/ [R=301,L,nocase]

The first line skips the rewrite if the case is already correct.

---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org