简体   繁体   中英

Rewrite directory location to a php file nginx

I'm having difficulty converting this .htaccess in /thumb directory to nginx to work.

.htaccess file:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule .* ../thumb.php [L,QSA]
</IfModule>

What I tried:

location /thumb {
    rewrite ^(.*)$ /thumb.php;
}

location /thumb {
    index thumb.php;
    rewrite ^/thumb/(.*)$ /thumb.php;
}

These won't work.

edited: I think I found the problem but I'm still puzzle on the solutions. I made a small echo php file to test, all result that does not end in extension seem to work. Any url that end with any extension will return a 404.

http://www.example.com/thumb work
http://www.example.com/thumb/jsdlfjfds work
http://www.example.com/thumb/jsdlfjfds/sfjlkdfjldf work
http://www.example.com/thumb/asldkjfls.png not work
http://www.example.com/thumb/zxcvmfds/asldkjfls.jpg not work

How do I rewrite full url, including all extension to /thumb.php? I always thought this regex mean full url with extension ^(.*)$?

thumb.php

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 <?php echo '<p>Hello World</p>'; ?>
 </body>
</html>

There was another location that match the file extensions and it seem the two can't co-exist. They need to be put in a nested location.

location /thumb {
        location ~* ^.+\.(jpg|jpeg|gif|png|bmp|webp|svg|ai|eps)$ {
                access_log off;
                log_not_found off;
                expires max;
                rewrite ^(.*)$ /thumb.php;
        }
        rewrite ^(.*)$ /thumb.php;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM