YueQi Li
YueQi Li

Reputation: 313

Nginx - How to redirect a directory to a file that its path contains the directory?

I'm new to Nginx and I'm trying to redirect a directory to a file, here is basically what I'm trying to do:

When entering this link:
http://localhost:8889/dir

go to this link instead:

http://localhost:8889/dir/path/to/the/file/index.html

As you can see the directory is part of the file path which I'm trying to redirect to. Plus there is already a location block in the config file to redirect that directory to the proper location:

location /dir {
    root      /opt/dir;
}

My first attempt was to use the rewrite directive as I saw from this blog(https://jeffsebring.com/2012/nginx-301-redirects/):

if ( $request_filename ~ dir ) {
    rewrite ^ http://localhost:8889/dir/path/to/the/file/index.html permanent;
}

But the page says it has a redirect loop, which I believe is the conflict with the old location block.

Then I tried to add another location block as I saw from here(nginx rewrite virtual directory to file):

location /dir {
    rewrite ^/dir$ /dir/path/to/the/file/index.html; 
}

But after reloading config file, Nginx told me there is already a location block with the same directory exists.

So my question is is there any way I can do this? or it is not even possible?

Thanks!!

Upvotes: 2

Views: 6914

Answers (1)

YueQi Li
YueQi Li

Reputation: 313

Found the solution.

I used "return" to return the full hard-coded url instead rewrite the current one:

location ~* /dir$ {
    return http://localhost:8889/dir/path/to/the/file/index.html; 
}

And also this rewrite solution works as well:

location ~* /dir$ {
    rewrite ^/dir$ /dir/path/to/the/file/index.html;
}

The problem I had was actually caused by cache. I was actually reloading the page from cache so I could not see the result after changing nginx config file, and I resolved this by checking the "Disable cache" option in developer tools in Chrome.

Upvotes: 1

Related Questions