POST not allowed (was Re: Location problems)
Igor Sysoev
is at rambler-co.ru
Sat Mar 8 23:06:01 MSK 2008
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/
More information about the nginx
mailing list