POST not allowed (was Re: Location problems)
Igor Sysoev
is at rambler-co.ru
Mon Mar 10 13:28:30 MSK 2008
On Mon, Mar 10, 2008 at 10:05:17AM +0000, Igor Clark wrote:
> Thanks Igor. I just tried this and it allows it through, but it
> appears to the upstream as a GET. It needs to be a POST as it has
> multipart/form-data. Any thoughts?
The patch. It will be included in 0.6.27.
> cheers
> Igor
>
> On 8 Mar 2008, at 20:06, Igor Sysoev wrote:
>
> >On Thu, Mar 06, 2008 at 05:41:21PM +0000, Igor Clark wrote:
> >
> >>The following configuration is giving me 405 Not Allowed errors
> >>when I
> >>try to POST to any URI.
> >>
> >>I'm guessing that it thinks the URLs are static, but I don't know
> >>why.
> >
> >Try to change
> >
> >- error_page 404 = @...;
> >+ error_page 404 405 = @...;
> >
> >>Example URI is /admin/clips/edit/63 - but I've tried posting to /
> >>with
> >>the same result.
> >>
> >>Nothing is written to the error_log, even on "info" or "notice",
> >>though the 405 appears in access_log.
> >>
> >>I've tried it with fastcgi_intercept_errors and recursive_error_pages
> >>both off, with the same result.
> >>
> >>Any ideas on how to fix it would be very welcome.
> >>Thanks very much!
> >>Igor
> >>
> >>
> >> server {
> >> listen 80;
> >> server_name my.web.site;
> >>
> >> access_log /path/to/logs/access.log main;
> >> error_log /path/to/logs/error.log info;
> >>
> >> root /path/to/public;
> >>
> >> # enable nginx to serve custom error pages
> >> # on receiving HTTP error codes from back-end
> >> fastcgi_intercept_errors on;
> >> recursive_error_pages on;
> >>
> >> # show custom error pages
> >> error_page 403 /403.html;
> >> error_page 404 /404.html;
> >> error_page 500 /500.html;
> >>
> >> # deny public access to frontend script
> >> location /frontend.php {
> >> internal;
> >> }
> >>
> >> # deny public access to admin script
> >> location /admin.php {
> >> internal;
> >> }
> >>
> >> # serve standard files standardly.
> >> # if file not found, fall back to php app using (rewrite if
> >>neceessary) URL
> >> location / {
> >> rewrite ^/$
> >> /financethemes/index;
> >> rewrite ^/speakers/((?!video).+)/?$
> >> /speakers/video/$1;
> >> rewrite ^/financethemes/((?!video|index).+)/?$
> >> /financethemes/video/ $1;
> >> rewrite ^/transcripts/(speaker|theme)/(.+)/?$
> >> /transcripts/view/ $1/$2;
> >>
> >> error_page 404 = @phpapp;
> >> }
> >
> >You do not need these rewrite's, use location's.
> >The configuration is bigger, but it's much clearer and so it's
> >scaleable:
> >you can easy add new locations without being afraid to break some
> >rewrite.
> >
> >However, you may need to use some rewrite's in these locations if
> >you need
> >to rewrite URI to pass into "location ~ \.flv$" with changed URI to
> >match
> >common root.
> >
> > location = / {
> > index index;
> > root /path/to/public/financethemes;
> > error_page 404 = @phpapp;
> > }
> >
> > location / {
> > error_page 404 = @phpapp;
> > }
> >
> > location /speakers/ {
> > alias /path/to/public/speakers/video/;
> > error_page 404 = @phpapp;
> > }
> >
> > location /speakers/video/ {
> > error_page 404 = @phpapp;
> > }
> >
> > location /financethemes/ {
> > alias /path/to/public/financethemes/video/;
> > error_page 404 = @phpapp;
> > }
> >
> > location /financethemes/video/ {
> > error_page 404 = @phpapp;
> > }
> >
> > location /transcripts/theme/ {
> > alias /path/to/public/transcripts/view/theme/;
> > error_page 404 = @phpapp;
> > }
> >
> > location /transcripts/speaker/ {
> > alias /path/to/public/transcripts/view/speaker/;
> > error_page 404 = @phpapp;
> > }
> >
> >> # serve not found urls using /frontend.php script
> >> location @phpapp {
> >> fastcgi_pass 127.0.0.1:8888;
> >> fastcgi_param SCRIPT_FILENAME
> >> $document_root/frontend.php;
> >> fastcgi_param QUERY_STRING CONTROL_PATH=$uri;
> >> include conf/fastcgi_params
> >> }
> >>
> >> # IP-restrict anything under /admin
> >> location /admin {
> >> allow 1.2.3.4;
> >> deny all;
> >>
> >> rewrite ^/admin/?$ /admin/clips/all;
> >>
> >> error_page 404 = @adminapp;
> >> }
> >>
> >> # serve admin app using /admin.php;
> >> location @adminapp {
> >> fastcgi_pass 127.0.0.1:8888;
> >> fastcgi_param SCRIPT_FILENAME
> >> $document_root/admin.php;
> >> fastcgi_param QUERY_STRING CONTROL_PATH=$uri;
> >> include conf/fastcgi_params;
> >> }
> >>
> >> # use the FLV module for flv files
> >> location ~ \.flv$ {
> >> flv;
> >> }
> >>
> >> # deny access to .svn dirs
> >> location ~ /\.svn {
> >> deny all;
> >> }
> >> }
> >>
> >
> >--
> >Igor Sysoev
> >http://sysoev.ru/en/
> >
>
> --
> Igor Clark // POKE // 10 Redchurch Street // E2 7DD // +44 (0)20 7749
> 5355 // www.pokelondon.com
>
>
>
>
>
--
Igor Sysoev
http://sysoev.ru/en/
-------------- next part --------------
Index: src/http/ngx_http_special_response.c
===================================================================
--- src/http/ngx_http_special_response.c (revision 1240)
+++ src/http/ngx_http_special_response.c (working copy)
@@ -439,9 +439,6 @@
r->err_status = err_page->overwrite;
- r->method = NGX_HTTP_GET;
- r->method_name = ngx_http_get_name;
-
r->zero_in_uri = 0;
args = NULL;
@@ -494,6 +491,10 @@
}
if (uri->data[0] == '/') {
+
+ r->method = NGX_HTTP_GET;
+ r->method_name = ngx_http_get_name;
+
return ngx_http_internal_redirect(r, uri, args);
}
More information about the nginx
mailing list