找不到Nginx的url重写文件

我已经转换我的.htaccess与Nginx的工作,但我有很多404错误或错误的文件夹和子文件夹重写显示。

这个Nginx的configuration适用于文件夹和子文件夹,但是/view/它会去/home/website/www/index.php

.htaccess

 RewriteRule ^view/execute(.+)$ /home/website/view/exec.php?r=$1 [QSA,L] RewriteRule ^view/status$ /home/website/view/status.php [QSA,L] RewriteRule ^(.+)/$ /home/website/www/index.php?a=$1 [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ /home/website/www/index.php?a=$1 [QSA,L] 

和Nginxconfiguration:

 listen 80; ## listen for ipv4; this line is default and implied listen [::]:80 default_server ipv6only=on; ## listen for ipv6 root /home/website/www; index index.php index.html index.htm; # Make site accessible from http://localhost/ server_name example.com; error_page 404 /home/website/error/index.php?er=404; location / { set $1 "/index.php"; try_files $uri $uri/ @rewrites; root /home/website/www; index index.php index.html index.htm; } location ~ \.php$ { try_files $uri /index.php @rewrites =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # rewrites location @rewrites { rewrite ^/(.*)$ /home/website/www/index.php?a=$1; rewrite ^view/execute(.*)$ /home/website/view/execute.php?a=$1; #rewrite ^view/(.*)$ /home/website/view/index.php?a=$1 last; } 

谢谢。

编辑

我有这个错误: [error] 2329#0: *1 FastCGI sent in stderr: "Unable to open primary script: /home/website/www/home/website/www/index.php (No such file or directory)" while reading response header from upstream, request: "GET /view/execute/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:"

带有别名

 location / { try_files $uri $uri/ /index.php?a=$uri; } location /view/execute { index test.txt; alias /home/website/view; } 

它的工作与test.txt但如果我改变与test.php我有这个错误'No input file specified.'

我的文件夹是这样的:

 - /home/ - /website/ - /view/ - execute.php - test.php - test.txt - /www/ - index.php - /function/ 

URL像example.com/registre/confirm工作,但这个urlexample.com/view/execute不工作:/我testing给permision + X与recursion的文件夹/查看/但不工作

对不起,所有这个问题我noobol大声笑

你的nginxconfiguration不好。 尝试这样的事情:

 listen 80; listen [::]:80 default_server ipv6only=on; root /home/website/www; index index.php index.html index.htm; server_name example.com; error_page 404 /home/website/error/index.php?er=404; location / { rewrite ^view/execute(.*)$ /home/website/view/execute.php?a=$1; try_files $uri $uri/ /home/website/www/index.php?a=$uri; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } 

所以,你configuration中的主要问题是:

  1. 重写行在@rewrite块中的顺序是错误的,所以后面的重写从来没有达到过,因为第一个重写规则总是匹配的。
  2. PHP位置块有一个不需要的try_files规则,这可能会导致PHP文件的问题。

如果上面的configuration不起作用,您可以尝试用这些行replacetry_files行:

 rewrite ^/(.*)$ /home/website/www/index.php?a=$1; try_files $uri $uri/ =404;