在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; } . . }