Magento,如何在url中重写index.php? (nginx的)

时间:2013-08-06 04:17:00

标签: magento nginx php

我有关于magento中重写规则index.php的问题。

实施例。     domain / indoor.html是500内部服务器错误但是     domain / index.php / indoor.html可以显示。

    My nginx.conf is 

    user  root;
    worker_processes  1;

    error_log   /var/log/nginx/error.log;

    pid        /var/run/nginx.pid;

    events {
         worker_connections  1024;
         multi_accept on;
         use epoll;
    }

http   {
index index.html index.php;
include       /etc/nginx/mime.types;
default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';                   

server_tokens       off;
sendfile            on;
tcp_nopush          on;
tcp_nodelay         on;


## Gzipping is an easy way to reduce page weight
gzip                on;
gzip_vary           on;
gzip_proxied        any;
gzip_types          text/css application/x-javascript;
gzip_buffers        16 8k;
gzip_comp_level     8;
gzip_min_length     1024;

##  SSL global settings
#ssl_session_cache shared:SSL:15m;
#ssl_session_timeout 15m;
#ssl_protocols             SSLv3 TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers               AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH;
#ssl_prefer_server_ciphers on;

keepalive_timeout   10;

## Nginx will not add the port in the url when the request is redirected.
#port_in_redirect off; 

## Multi domain configuration
#map $http_host $storecode { 
   #www.domain1.com 1store_code; ## US main
   #www.domain2.net 2store_code; ## EU store
   #www.domain3.de 3store_code; ## German store
   #www.domain4.com 4store_code; ## different products
#}

##   Add www
server {
    listen 80;
    server_name example.com;
    return 301 $scheme://www.example.com$request_uri;
}

server {   
    listen 80;
    #listen 443 ssl;
    server_name 192.168.85.114;
    root /var/www/html;
    access_log  /var/log/nginx/access_192.168.85.114.log  main;

    if ($http_user_agent = "") { return 444;}

    ####################################################################################
    ## SSL CONFIGURATION

       #ssl_certificate     /etc/ssl/certs/www_server_com.chained.crt; 
       #ssl_certificate_key /etc/ssl/certs/server.key;

    #################################################################################### 
    ## Server maintenance block. insert dev ip 1.2.3.4 static address www.whatismyip.com

    #if ($remote_addr !~ "^(1.2.3.4|1.2.3.4)$") {
        #return 503;
        #}

    #error_page 503 @maintenance;   
    #location @maintenance {
        #rewrite ^(.*)$ /error_page/503.html break;
        #internal;
        #access_log off;
        #log_not_found off;
    #}

    ####################################################################################
    ## 403 error log/page

    #error_page 403 /403.html;
    #location = /403.html {
        #root /var/www/html/error_page;
        #internal;
        #access_log   /var/log/nginx/403.log  error403;
    #}

    ####################################################################################
    ## Main Magento location

    location / {
        try_files $uri $uri/ @handler;
    }

    ####################################################################################
    ## These locations would be hidden by .htaccess normally, protected

    location ~ (/(app/|includes/|/pkginfo/|var/|errors/local.xml)|/\.svn/|/.ht.+) {
        deny all;
        #internal;
    }

    ####################################################################################
    ## Protecting /admin/ and /downloader/  1.2.3.4 = static ip (www.whatismyip.com)

    #location /downloader/  {
        #allow 1.2.3.4;  allow 1.2.3.4;  deny all;
        #rewrite ^/downloader/(.*)$ /downloader/index.php$1;
    #}
    #location /admin  {
        #allow 1.2.3.4; allow 1.2.3.4; deny all;
        #rewrite / /@handler;
    #}   

    ####################################################################################
    ## Images, scripts and styles set far future Expires header

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        open_file_cache max=10000 inactive=48h;
        open_file_cache_valid 48h;
        open_file_cache_min_uses 2;
        open_file_cache_errors off;
        expires max;
        log_not_found off;
        access_log off;
    }

    ####################################################################################
    ## Main Magento location

    location @handler {
        rewrite / /index.php?$args;
    }

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

    ####################################################################################  
    ## Execute PHP scripts

    location ~ .php$ {
        add_header X-UA-Compatible 'IE=Edge,chrome=1';
        try_files $uri $uri/ =404;
        #try_files $uri $uri/ @handler;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        ## Store code with multi domain
        #fastcgi_param  MAGE_RUN_CODE $storecode;
        ## Default Store code
        fastcgi_param  MAGE_RUN_CODE default; 
        fastcgi_param  MAGE_RUN_TYPE store; ## or website;
        include        fastcgi_params; ## See /etc/nginx/fastcgi_params;

        if (!-e $request_filename) { 
            rewrite / /index.php last; 
        }
    }
}

}

但这不能改写index.php,请帮助我解决这个问题。

3 个答案:

答案 0 :(得分:4)

你是通过在最终位置内做另一个try_files来创建一个循环。当我在桌面后面时,我会用一个例子修改我的答案。

好的,这就是让nginx与Magento合作的细节。首先,你的否认有问题:

location ~ (/(app/|includes/|/pkginfo/|var/|errors/local.xml)|/\.svn/|/.ht.+) {

/ pkginfo /不应包含前导斜杠,并且最安全的使用/。而不是特别命名.svn和.ht:如果你曾经切换到Mercurial或Git,你也不希望那些访问过。作为旁注 - 对于nginx .ht是没有必要的。

你缺少/ lib /这就是我通常将拒绝分成两部分的原因:

location ~ ^/(app/|includes/|pkginfo/|var/|errors/local.xml|lib/|media/downloadable/) { deny all; }
location ~ /\. { deny all; }

请注意,第一个锚定在开头。这对于/ lib /是必要的,因为/ js / lib /是一个需要打开的有效路径,并且没有锚定到请求uri的开头,它将匹配,并且访问者将无法加载JavaScript库。

处理重写:

首先,基地位置。设置索引,尝试使用uri并将处理程序定义为catch all。

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

在处理程序中,将所有内容重写为index.php:

location @handler {
    rewrite /   /index.php;
}

最后,处理php文件。如果try_files没有捕获它,我们会对现有的php文件进行最终检查,然后拆分路径信息并传递params。如果多线程有效,我们还会根据变量$ store设置MAGE_ *变量。如何映射这些,你已经在配置中开始了,所以我不会重复它:

location ~ \.php(/.*)? {
    if (!-e $request_filename) {
        rewrite / /index.php last;
    }
    expires off;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_split_path_info ^(.*\.php)(/.*)?$;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    fastcgi_param MAGE_RUN_CODE $store;
    fastcgi_param MAGE_RUN_TYPE "store";
    include fastcgi_params;
}

就是这样。希望它有所帮助。

答案 1 :(得分:0)

您的问题可能在@handler位置,是您自己编写还是在magento文档上?

我建议您尝试rewrite ^ /index.php$request_uri;

答案 2 :(得分:-2)

你应该编辑你的httpd.conf文件

linux中的

尝试添加此代码 /etc/apache2/apache2.conf文件

<Directory "/var/www/magento">   // Path for your site
    AllowOverride All
</Directory>