
Tentei converter essas regras do htaccess para nginx:
apache
# 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;
}
}
Acontece que quero usar as reescritas apenas na pasta /home/goggelz/www/php-mvc, e outro problema: quando tento abrir o localhost, o arquivo index.php está sendo baixado, mas quando tento conecte-se com 127.0.0.1, o index.php é executado. Como posso resolver esses problemas?
Responder1
Esta é uma versão que usa try_files
a diretiva nginx.
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;
}
}
Aqui, o try_files
é usado para primeiro verificar se o URI solicitado existe como um arquivo ou diretório. Se existir, é enviado. Caso não exista, a solicitação é encaminhada para o @mvcrewrite
bloco, onde a solicitação é reescrita para passar o URI para o index.php
Isso também pode resolver o problema de abertura do host local.