以下の書き換えはうまくいきます:
rewrite ^/city/restaurants$ /city/listings/restaurants permanent;
しかし、これは機能しません
rewrite ^/city/restaurants$ /city/listings/restaurants last;
rewrite ^/city/restaurants$ /city/listings/restaurants break;
何がいけないの?
nginxサーバーブロック全体の下
server {
listen 80 default backlog=1024;
server_name mydomain.com;
client_max_body_size 20M;
charset utf-8;
keepalive_timeout 50;
access_log /var/log/access_log main;
error_log /var/log/error_log info;
root /var/www/;
index index.php index.phtml index.html;
autoindex on;
location ~ \..*/*\.php$ {
return 403;
}
location ~^/sites/.*/private/{
return 403;
}
location ~^/sites/.*/files/* {
try_files $uri @rewrite;
}
location ~ (^|/)\. {
return 403;
}
location / {
rewrite ^/city/restaurants$ /city/listings/restaurants last;
location ~* \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
#try_files $uri @rewrite;
}
try_files $uri @rewrite;
}
location @rewrite {
rewrite ^ /index.php;
}
location ~* \.(?:ico|css|js|gif|jpg|jpeg|png)$
{
try_files $uri $uri/;
expires 30d;
}
}
まず、location
ブロックから外側のserver
ブロックにキー書き換えを移動します。それはあなたのロジックを簡素化します。
次に、 rewrite debug logging を取得して、取得している404が元のURLからのものか、書き換えられたURLからのものかを確認します。
最後に、根本的な原因がまだ見つからない場合 一般的なデバッグログを有効にする Nginxの場合:
error_log /path/to/log debug;