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