Sintaxe de reconfiguração correta para remover index.php

1

Eu tenho um nginx vHost que hospeda:

  • um CMS em /
  • uma loja magento em /store

As coisas estão funcionando bem, exceto uma coisa:

Removendo index.php da URL. No momento, os seguintes URLs estão funcionando

example.com/store/index.php/my-funny-test-product.html and (as there are a few subshops in magento) 
example.com/store/index.php/city/my-funny-test-product.html

Agora eu tenho que criar um redirecionamento para que o index.php possa ser removido da URL.

example.com/store/my-funny-test-product.html or example.com/store/city/my-funny-test-product.html

Consegui que funcionasse no meu Apache local com este .htaccess

RewriteEngine on
RewriteBase /store/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule .* index.php [L]

Com base nisso, criei a seguinte reescrita

location /store {
   rewrite ^/store /store/index.php;
}

Agora o example.com/store/my-funny-test-product.html funciona, mas as imagens CSS e similares estão quebradas! Eu tentei adicionar if (!-e $request_filename) para corrigir isso, mas depois recebi um erro nginx 40x.

Como posso conseguir uma reescrita de trabalho de example.com/store/my-funny-test-product.html e example.com/store/city/my-funny-test-product.html para a subpasta / loja sem quebrar css & co e sem index.php no URL?

Aqui está a configuração completa do vhost

    ## The whole setup stays close with the magento recommendations
    ## http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/configuring_nginx_for_magento

server {
    listen myip:80;
    server_name .example.com;

    root /var/www/mydomain/public_html;

    location / {
        index index.html index.php;
        try_files $uri $uri/ @handler;  
    }

    ## here comes my rewrite stuff to remove index.php from the subfolder ##
   location /store {
       rewrite ^/store /store/index.php;
   }

    ## followed by some deny rulesets not relevant here ##

    location @handler { ## Magento common front handler
        rewrite / /index.php;
    }

    location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
        rewrite ^(.*.php)/ $1 last;
    }

    location ~ .php$ { ## Execute PHP scripts
        if (!-e $request_filename) { rewrite / /index.php last; } ## Catch 404s that try_files miss

        expires        off; ## Do not cache dynamic content
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  HTTPS $fastcgi_https;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  MAGE_RUN_CODE default; ## Store code is defined in administration > Configuration > Manage Stores
        fastcgi_param  MAGE_RUN_TYPE store;
        include        fastcgi_params; ## See /etc/nginx/fastcgi_params
    }
    
por Tsolen 22.11.2014 / 12:17

2 respostas

1

Now example.com/store/my-funny-test-product.html works but CSS images and the like are broken!

Use arquivos try

As solicitações para arquivos css (ou quaisquer arquivos reais em /var/www/example.com/public_html/store ) não estão funcionando no momento porque o requeset é roteado incondicionalmente para /store/index.php . A alteração mínima necessária para fazer esse trabalho é usar try_files :

## here comes my rewrite stuff to remove index.php from the subfolder ##
location /store {
    # rewrite ^/store /store/index.php; NO
    try_files $uri /store/index.php;
}

Desta forma, se o seguinte arquivo existir:

/var/www/example.com/public_html/store/css/style.css

Em seguida, o URL a seguir retornará seu conteúdo:

http://example.com/store/css/style.css

E qualquer solicitação iniciada com /store que não mapear diretamente para um arquivo será passada para /store/index.php .

    
por 22.11.2014 / 16:14
-1

Em seguida, adicione o seguinte código a este arquivo .htaccess recém-criado

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index\.php [NC]
RewriteRule ^ %1 [R=301,L]
    
por 15.04.2016 / 06:40