找不到nginx重写位置

在Nginxconfiguration文件中,没有设置像下面的重写位置,但不工作,每次返回404没有find,这里有什么问题?

server { listen 80; server_name mydomain.com www.mydomain.com; root /var/www/html/mydomain.com; . . . location /postfixadmin { root /var/www/html/postfixadmin/; index index.php index.html index.htm; location ~ ^/postfixadmin/(.+\.php)$ { try_files $uri $uri/ =404; root /var/www/html/postfixadmin/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/postfixadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /var/www/html/postfixadmin/; } } location /PostfixAdmin { rewrite ^/* /postfixadmin last; } . . } 

你的configuration有几个问题。

首先,您正在使用位置内的root指令。 这很可能是404错误的原因。

你应该改变第一个位置块,像这样开始:

 location /postfixadmin { alias /var/www/html/postfixadmin/; 

然后,你应该从第一个内部location块中删除root指令。

第一个内部location开始应该是这样的:

 location ~ ^/postfixadmin/.+\.php$ { try_files $uri =404; 

根本不需要第二个内部location块,因为别名是从父location块inheritance的。

最后,你应该改变最后的location ,看起来像这样:

 location /PostFixAdmin { rewrite ^ /postfixadmin last; } 

问题通过改变根位置解决

正确的configuration是:

 server { listen 80; server_name mydomain.com www.mydomain.com; root /var/www/html/mydomain.com; . . . location /postfixadmin { root /var/www/html/; index index.php index.html index.htm; location ~ ^/postfixadmin/(.+\.php)$ { try_files $uri $uri/ =404; root /var/www/html/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/postfixadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /var/www/html/; } } location /PostfixAdmin { rewrite ^/* /postfixadmin last; } . . }