need help cleaning up user directory and php rules

Igor Sysoev is at rambler-co.ru
Sat Mar 14 21:33:43 MSK 2009


On Sat, Mar 14, 2009 at 11:25:10AM -0700, mike wrote:

> Is all you want the ability to have
> 
> foo.com/~username/ ?
> 
> If so I have it working a lot easier. Well, at least for ~mike. But
> with the new regex location/etc. support it might be able to work
> without that.
> 
> something like
> 
> location ^/~(.+) {
>          root /home/$1/public_html/;
> }
> 
> Perhaps? Not sure. I should probably try it but I'm too lazy. Igor
> would probably know how to hack it quick.

It should be:

 location ^/~(.+?)(/.+)?$ {
          alias  /home/$1/public_html$2;
 }

because
       root /home/$1/public_html/;

will map /~mike/some/page.html to /home/mike/public_html/~mike/some/page.html;

> On Sat, Mar 14, 2009 at 10:59 AM, Edho P Arief <edhoprima at gmail.com> wrote:
> > ...and 10 hours later I fixed it by myself. Tested with most common
> > cases, also ensured basic logic. Can be cleaned up better (or perhaps
> > squash more bugs, if any) but I'm too sleepy right now.
> >
> > Also probably rather slow. My own connection is currently slow and I
> > only tried this on remote system.
> >
> >
> > server {
> >        listen 80;
> >        server_name genshiken.unit.itb.ac.id;
> >        index index.php;
> >        #change /usr/local/etc/nginx/ to default nginx root path
> >        if ($request_filename ~
> > ^/usr/local/etc/nginx//~([a-zA-Z0-9]*)(.*[^/]|)(/*)$) {
> >                #$org_uri is old, unused variable but might have some
> > use for improvement (or deletion)
> >                set $org_uri $request_uri;
> >                set $is_userdir 1;
> >                set $newroot /home/$1/public_html;
> >                set $homedir $1;
> >                set $filedir $2;
> >                set $slashes $3;
> >                rewrite ^/~.* f~/;
> >        }
> >        if ($is_userdir != 1) {
> >                set $newroot /usr/local/www/data;
> >                #set to random string if not userdir (see above).
> >                set $org_uri zxzz123;
> >        }
> >
> >        root $newroot;
> >
> >        location f~/ {
> >                #$is_ok: check wheter to apply rewrite or not at this
> > and next location
> >                set $is_ok 1;
> >                if (-d /home/$homedir/public_html$filedir) {
> >                        set $is_ok 2;
> >                        rewrite ^f~/$ d~/;
> >                }
> >                if ($is_ok = 1) {
> >                        rewrite ^f~/$ finaldest~/;
> >                }
> >        }
> >
> >        location d~/ {
> >                #add slash for directory (if there's none yet - to
> > avoid unwanted rewrite by nginx)
> >                if ($slashes = "") {rewrite ^d~/$ /~$homedir$filedir/
> > redirect; set $is_ok 1; }
> >                if ($is_ok = 2) {rewrite ^d~/$ finaldest~/; set $is_ok 1; }
> >        }
> >
> >        location finaldest~/ {
> >                #extra: user-specific rewrite
> >                if ($homedir = sampleuser) {rewrite ^finaldest~/$ sampleuser~/;}
> >                #final destination (if there's no user-specific rewrite)
> >                rewrite ^finaldest~/$ $filedir$slashes;
> >        }
> >
> >        #user-specific rewrite block
> >        location sampleuser~/ {
> >                #or sampleuser~/$filedir$slashes; to get subfolder
> > location ruling
> >                rewrite ^sampleuser~/$ $filedir$slashes;
> >                #wordpress. haven't able to make use of try_files or
> > other modern mechanics yet
> >                if (!-e $request_filename) {
> >                        rewrite  ^(.*)$  /blog/index.php?q=$1  last;
> >                        break;
> >                }
> >        }
> >
> >        #just a standard php block.
> >        location ~ \.php$ {
> >                if (!-f $document_root$fastcgi_script_name) { return
> > 404; break; }
> >                fastcgi_pass    127.0.0.1:9000;
> >                fastcgi_index   index.php;
> >                fastcgi_param   SCRIPT_FILENAME
> > $document_root$fastcgi_script_name;
> >                include fastcgi_params;
> >        }
> >
> >
> >
> > --
> > O< ascii ribbon campaign - stop html mail - www.asciiribbon.org
> >
> >

-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list