Joomla URL Rewriting funciona automaticamente no Nginx

1

Isso está me enlouquecendo e eu não entendo como isso funciona automaticamente. Eu tenho o nginx como meu servidor web e instalei o Joomla que possui regravação de URL, o que remove o index.php da URL. Antes, quando eu estava usando o Apache, eu tinha que habilitar o .htaccess com RewriteEngine On para que isso funcionasse. Mas com o Nginx, quando eu habilito "Use URL Rewriting" ele funciona automaticamente. Eu só uso o Nginx que passa os arquivos php para php-fpm. Isso é tudo. Eu não adicionei nenhuma regra de reescrita especial além do que foi dado nos documentos do Joomla. Eu não entendo como 'Use URL Rewriting' funciona automaticamente quando eu o habilito, pois não há .htaccess para Nginx.

Os documentos do Joomla neste tópico não ajudaram nem um nem o outro. Na segunda etapa, diz

Enable the Use Apache mod_rewrite/URL rewriting option and Save: This option uses the Apache mod_rewrite function to eliminate the "index.php" portion of the URL.

.....

If this option causes errors, please see How to check if mod rewrite is enabled on your server. If it is not enabled and you have access to the file apache/conf/httpd.conf, open that file and check if the line LoadModule rewrite_module modules/mod_rewrite.so is uncommented. If necessary, uncomment the line and restart the Apache web server.

Não sei por que isso é adicionado em uma configuração Nginx, já que não há mod_rewrite no Nginx. O URL Rewriting no Joomla backend diz isso:

Use URL rewriting Select to use a server's rewrite engine to catch URLs that meet specific conditions and rewrite them as directed. Available for IIS 7 and Apache. Apache users only! Rename htaccess.txt to .htaccess before activating. Rename web.config.txt to web.config and install IIS URL Rewrite Module before activating.

Não diz nada sobre o Nginx, mas ainda funciona. Eu estou coçando minha cabeça aqui. Alguém pode me dizer como index.php do Joomla é removido tão facilmente no Nginx? Esta é a minha configuração Niganx Vhost:

server {

        listen 80;
        server_name example.com;
        root /var/www/example/public_html;
        index  index.php index.html index.htm default.html default.htm;

        access_log /var/log/nginx/accn_access.log;
        error_log /var/log/nginx/accn_error.log;

        ##
        # JOOMLA SEF
        ##

        location / {
              try_files   $uri $uri/ /index.php?q=$request_uri;
        }

        ##
        # PHP scripts to FastCGI 
        ##
        location ~ \.php$ {
            try_files $uri =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;

        }

}

Veja .. é uma configuração bastante direta. Onde está a mágica acontecendo?

    
por Neel 10.11.2014 / 20:49

1 resposta

2

A mágica acontece aqui:

try_files $uri $uri/ /index.php?q=$request_uri;

Isso significa que o nginx verifica primeiro se o arquivo ou diretório solicitado existe no sistema de arquivos. Se um arquivo não existe, ele passa a requisição para o Joomla e passa o URI original para o parâmetro q .

    
por 10.11.2014 / 21:16