以下重写工作正常:
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;
}
}
答案1
首先,将密钥重写从location
块中移出并放入封闭server
块中。这将简化您的逻辑。
下一个,启用重写调试日志确认您收到的 404 是来自原始 URL 还是重写的 URL。
最后,如果仍然找不到根本原因启用常规调试日志记录对于 Nginx:
error_log /path/to/log debug;