nginx [emerg] desconhecido variável “0”

2

Eu tenho tentado por dois dias para converter um .htaccess para nginx reescrever o arquivo original ficou assim:

# Turn on URL rewriting
RewriteEngine On

RewriteBase //

# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# List of files in subdirectories will not be displayed in the browser
Options -Indexes

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

AddDefaultCharset utf-8
AddCharset UTF-8 .htm .html .txt
AddType "text/html; charset=UTF-8" .htm .html .txt
AddType "text/css; charset=UTF-8" .css
AddType "text/javascript; charset=UTF-8" .js

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Eu consegui chegar a isso:

# nginx configuration 
charset utf-8; 
autoindex off; 

location /application {
rewrite ^/(?:application|modules|system)\b.* /index.php/$0 break;
} 
location /modules {
rewrite ^/(?:application|modules|system)\b.* /index.php/$0 break;
}
location /system { 
rewrite ^/(?:application|modules|system)\b.* /index.php/$0 break; 
} 
location / { 
if (!-e $request_filename){ 
rewrite ^(.*)$ /index.php/$0; 
} 
} 
location ~ \.* { 
deny all; 
}

Mas quando eu reinicio o nginx eu recebo:

[emerg] unknown "0" variable
nginx: configuration file /etc/nginx/nginx.conf test failed

Eu não entendo porque isso é. Alguém pode me ajudar com isso?

    
por Adrian 17.09.2014 / 12:26

3 respostas

2

O nginx não possui a variável $0 , que é usada no Apache para toda a correspondência de padrões regex no Apache.

No nginx, você obtém a string equivalente usando $request_uri .

Então, você deve usar uma configuração como esta:

charset utf-8;
autoindex off;

location ~ /\.* {
    deny all;
}

location ~ /(?:application|modules|system) {
    return 301 /index.php$request_uri;
}

# Try first the actual files, if they do not exist, then try $request_uri via 'index.php'.
try_files $uri $uri/ /index.php/$request_uri;

Eu também consertei a regex de arquivos ocultos aqui.

    
por 17.09.2014 / 12:42
0

O regexp de reconexão de Nginx não possui uma variável $ 0. Você deve substituí-lo por algo que suporte.

    
por 17.09.2014 / 12:42
-1

Por favor use

$uri or $request_uri

em vez de $ 0.

    
por 17.09.2014 / 12:32