用于运行商店的NGINX虚拟/别名目录

时间:2013-01-04 11:33:55

标签: magento nginx

您好我在mysite.com有一家magento商店

现在我想设置一个将在mysite.com/german上运行我的德语网站的网址

使用相同的安装。我已经有一个半工作配置,但我的问题是在主页之外所有magento URL 404.这是我当前的配置。

server {

    listen 80;

    server_name mysite.com www.mysite.com;

    ####
    #
    #  BELOW THIS LINE IS MY ATTEMPT TO GET mysite.com/german to run from the same directory as mysite.com
    #
    ####


    location ~ /german(.*)\.php($|/) {
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/share/nginx/www$1.php;
        fastcgi_param MAGE_RUN_CODE german;
        fastcgi_param MAGE_RUN_TYPE website;        
    }

    location ~ /german(.*) {
        index index.htm index.php;
        autoindex off;
        alias /usr/share/nginx/www$1;
    }

    location ~ /deutch/ {
        index index.htm index.php;
        try_files $uri $uri/ @handler;
    }

旧配置:

    ###
    #
    # THIS BIT I THINK IS THE PART WHICH IS NOT QUITE WORKING, BUT I DON'T KNOW WHAT THE @handler PART DOES
    # 
    ###
    # This redirect is added so to use Magentos
    # common front handler when handling incoming URLs.
    location @handler {
        rewrite / /index.php;
    }

    ####
    #
    # BELOW THIS LINE IS THE ORIGINAL CONFIG WHICH RUNS mysite.com NO PROBLEMS
    #
    ####

    root /usr/share/nginx/www;

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

    # Deny access to specific directories no one
    # in particular needs access to anyways.
    location /app/ { deny all; }
    location /includes/ { deny all; }
    location /lib/ { deny all; }
    location /media/downloadable/ { deny all; }
    location /pkginfo/ { deny all; }
    location /report/config.xml { deny all; }
    location /var/ { deny all; }

    # Allow only those who have a login name and password
    # to view the export folder. Refer to /etc/nginx/htpassword.
    location /var/export/ {
        auth_basic "Restricted";
        auth_basic_user_file htpasswd;
        autoindex on;
    }

    # Deny all attempts to access hidden files
    # such as .htaccess, .htpasswd, etc...
    location ~ /\. {
         deny all;
         access_log off;
         log_not_found off;
    }

    # This redirect is added so to use Magentos
    # common front handler when handling incoming URLs.
    location @handler {
        rewrite / /index.php;
    }

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

    # Handle the exectution of .php files.
    location ~ .php$ {
        if (!-e $request_filename) {
            rewrite / /index.php last;
        }
        expires off;
        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 english;
        fastcgi_param MAGE_RUN_TYPE website;
        include fastcgi_params;
    }
}

1 个答案:

答案 0 :(得分:2)

location ~* \.php$ {
    if (!-e $request_filename) {
        rewrite / /index.php last;
    }
    expires off;
    set $runcode english;
    set $runtype website;
    if ( $request_uri ~* ^/german ) {
            set $runcode german;
    }
    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 $runcode;
    fastcgi_param MAGE_RUN_TYPE $runtype;
    include fastcgi_params;
}

这是第1部分,第2部分是确保代码从相同的代码库运行。 一种解决方案是将目录符号链接到根目录,在/ usr / share / nginx / www目录中执行以下操作:

ln -s . ./german

这很脏,但确实有效;)

我们使用以下内容重定向到正确的索引文件:

location /german {
    if ( -e $request_filename ) {
        break;
    }
    rewrite ^/german(.*)$   /german/index.php last;
}
    #
    #       Redirection of subdirectory php's to their respective php files
    #       
    location ~ .php/ {
        rewrite ^(.*.php)/ $1 last;
    }
    #
    #       Redirect everything else to root path
    #
    location / {
            try_files $uri $uri/ /index.php?$args;
    }