php - nginx rewrite rules by subdirectory -
i trying achieve following result nginx configuration:
a php app running in subdirectory of server, lets server.com/app/. files in images/ , styles/ (for example) should accessible, php files in api/ should executed, , in other cases nginx should pass whole string after app/ php variable, path.
i have no clue doing here, , can not seem find useful on web, if can chip in, thank you.
i running php5-fpm this:
location /app { index index.html index.php; access_log /{...}/access.log; error_log /{...}/error.log; location ~ \.php { try_files $uri = 404; fastcgi_pass php5-fpm-sock; fastcgi_index index.php; fastcgi_param script_filename $document_root$fastcgi_script_name; include fastcgi_params; } } please ask if need more details.
edit
for found works
location /{path}/ { index index.php; access_log /{path}/access.log; error_log /{path}/error.log; location ~\.php { try_files $uri = 404; fastcgi_pass php5-fpm-sock; fastcgi_index index.php; fastcgi_param script_filename $document_root$fastcgi_script_name; include fastcgi_params; } location ~ { try_files $uri $uri/ /{path}/index.php?path=$uri; } } however worried might allow unwanted file access. comments?
you can simplify moving try_files directive out of location sub-block config file ends looking like:
location /app { index index.php; try_files $uri $uri/ /app/index.php?path=$uri; access_log /{path}/access.log; error_log /{path}/error.log; location ~\.php { try_files $uri =404; fastcgi_pass php5-fpm-sock; fastcgi_index index.php; fastcgi_param script_filename $document_root$fastcgi_script_name; include fastcgi_params; } } the key thing try_files directive - nginx try each location in order specified. $uri looks file matching exact path specified (so /api/random.php loads correctly because it's file), $uri/ looks folder matching path, , attempts load index folder, , /app/index.php?path=$uri loads page /app/index.php. picked location ~\.php block , passed php-fpm.
the main thing i'd concerned access , error.log files publicly accessible virtue of being stored in web directory. if possible, shift them somewhere else (like /var/log maybe?)
Comments
Post a Comment