Beginner's question: redirecting /dir/index.html to /dir/
Igor Sysoev
igor at sysoev.ru
Fri Sep 10 08:10:46 MSD 2010
On Fri, Sep 10, 2010 at 07:58:52AM +0400, Igor Sysoev wrote:
> On Thu, Sep 09, 2010 at 06:22:23PM -0400, ez77 wrote:
>
> > Greetings,
> >
> > I'm trying to send all .../dir/index.html requests to .../dir/ . I
> > looked this up in forums but I'm only able to do it for the root
> > directory:
> >
> > [code]
> > location / {
> > root /var/www/mysite;
> > index index.html index.htm;
> > if ($request_uri = /index.html) {
> > rewrite ^ http://$host? permanent;
> > }
> > }
> > [/code]
> >
> > Some day I'll try to stop this copy-and-paste madness, but "in the
> > meantime"... could someone please give me a hand? I would greatly
> > appreciate it.
>
> You may do it using:
>
> - if ($request_uri = /index.html) {
> + if ($request_uri ~ /index.html) {
>
> However, using "if ($request_uri ..." means that you should use "location"
> instead of "if". Nevertheless, the right configuration:
>
> location / {
> root /var/www/mysite;
> index index.html;
> }
>
> location ~ /index.html$ {
> rewrite ^ http://$host/? permanent;
> }
>
> does not work, because "index index.html" redirects internally "/" to
> "/index.html" and you will get endless loop with browsers.
> However, you may avoid the internal redirect via try_files:
>
> location / {
> root /var/www/mysite;
> try_files $uri ${uri}index.html =404;
> }
>
> location ~ /index.html$ {
> rewrite ^ http://$host/? permanent;
> }
The configurations above rerirect to root only.
Here is the right way:
location / {
root /var/www/mysite;
index index.html;
}
location ~ ^(/.+/)index.html$ {
internal;
error_page 404 http://$host$1?;
}
--
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx
mailing list