2013-08-06 131 views
1

我有关于在magento中重写规则index.php的问题。Magento,如何重写URL中的index.php? (nginx)

Ex。 域/ indoor.html是500内部服务器错误但 域/ 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,请以实物您来解决了,我请大家帮忙。

回答

0

你的问题可能是在@handler位置,你把它写在你自己或者是它的Magento的文档?

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

+0

您的建议仍然无法解决了这个问题。 你确定这个问题是在@handler吗? –

-2

你应该修改httpd.conf文件

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

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

对不起,我使用nginx而不是apache。 –

+1

这个问题与Slowpache无关。 – 2013-12-20 07:41:24

3

你正在创建一个循环,在另一个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并定义一个处理程序。

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

在处理程序,改写一切的index.php:

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

最后,处理PHP文件。如果try_files没有捕获到它,我们会对现有的php文件进行最终检查,然后拆分路径信息并传递参数。我们还根据变量$ 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; 
} 

就是这样。希望能帮助到你。

+0

非常感谢。 –

+0

@Melvin嘿,任何想法如何做到这一点,当magento不居住在根?我目前的设置是一个居住在domain.com/mage的Magento安装和位于domain.com/shop1/shop2的多个实际商店(其中index.php被修改为运行网站,其余的只是符号链接到/ mage)。 – mniess