
Intenté convertir estas reglas de htaccess a 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;
}
}
La cuestión es que quiero usar las reescrituras solo en la carpeta /home/goggelz/www/php-mvc, y otro problema: cuando intento abrir localhost, el archivo index.php se descarga, pero cuando intento conéctese con 127.0.0.1, se ejecuta index.php. ¿Cómo puedo solucionar esos problemas?
Respuesta1
Esta es una versión que usa try_files
la directiva 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;
}
}
Aquí, se try_files
utiliza para verificar primero si el URI solicitado existe como un archivo o directorio. Si existe, se envía. Si no existe, la solicitud se reenvía al @mvcrewrite
bloque, donde la solicitud se reescribe para pasar el URI al index.php
Esto también podría solucionar el problema al abrir localhost.