Nginx htaccess重写指定的文件夹

我试图将这个htaccess规则转换为nginx

阿帕奇

# Necessary to prevent problems when using a controller named "index" and having a root index.php # more here: http://httpd.apache.org/docs/2.2/content-negotiation.html Options -MultiViews # Activates URL rewriting (like myproject.com/controller/action/1/2/3) RewriteEngine On # Disallows others to look directly into /public/ folder Options -Indexes # When using the script within a sub-folder, put this path here, like /mysubfolder/ # If your app is in the root of your web folder, then leave it commented out RewriteBase /php-mvc/ # General rewrite rules RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] 

nginx的

 server { listen 80; listen [::]:80 default_server ipv6only=on; root /home/goggelz/www; server_name localhost; rewrite_log on; location / { index index.php; } location /php-mvc { if (!-d $request_filename){ set $rule_0 1$rule_0; } if (!-f $request_filename){ set $rule_0 2$rule_0; } if (!-e $request_filename){ set $rule_0 3$rule_0; } if ($rule_0 = "321"){ rewrite^/(.+)$ /php-mvc/index.php?url=$1 last; } } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } } 

事情是,我只想在/ home / goggelz / www / php-mvc文件夹中使用重写,另一个问题是:当我尝试打开本地主机时,index.php文件正在被下载,但是当我尝试连接127.0.0.1,index.php执行。 我如何解决这些问题?

这是一个使用nginx的try_files指令的版本。

 server { listen 80; listen [::]:80 default_server ipv6only=on; root /home/goggelz/www; server_name localhost; rewrite_log on; index index.php; location /php-mvc { try_files $uri $uri/ @mvcrewrite; } location @mvcrewrite { rewrite ^ /php-mvc/index.php?url=$request_uri last; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } } 

在这里, try_files用于首先检查请求的URI是否作为文件或目录存在。 如果存在,则发送。 如果它不存在,请求被转发到@mvcrewrite块,在那里请求被重写,把URI传递给index.php

这也可能解决打开本地主机的问题。