Zen Cart嵌套目录的Nginx Rewrite规则

Zen Cart V1.5.1,Ultimate SEO 2.212,nginx/1.4.2下测试通过

完整规则如下

    # if the requested file exists, return it immediately
    if (-f $request_filename) {
        break;
    }
    #For Ultimate SEO URLs
    rewrite ^/(.*)-p-([0-9]+).html$ /index.php?main_page=product_info&products_id=$2&$args last;
    rewrite ^/(.*)-c-([0-9]+)_([0-9]+)/$ /index.php?main_page=index&cPath=$2_$3&$args last;
    rewrite ^/(.*)-c-([0-9]+)/$ /index.php?main_page=index&cPath=$2&$args last;
    rewrite ^/(.*)-m-([0-9]+).html$ /index.php?main_page=index&manufacturers_id=$2&$args last;
    rewrite ^/(.*)-pi-([0-9]+).html$ /index.php?main_page=popup_image&pID=$2&$args last;
    rewrite ^/(.*)-pr-([0-9]+).html$ /index.php?main_page=product_reviews&products_id=$2&$args last;
    rewrite ^/(.*)-pri-([0-9]+).html$ /index.php?main_page=product_reviews_info&products_id=$2&$args last;

# For eazy pages
    rewrite ^/(.*)-ezp-([0-9]+).html$ /index.php?main_page=page&id=$2&$args last;

# For Open Operations Info Manager
    rewrite ^/(.*)-i-([0-9]+).html$ /index.php?main_page=info_manager&pages_id=$2&$args last;

# For dreamscape's News & Articles Manager
rewrite "^news/?" /index.php?main_page=news&% last;
rewrite "^news/rss.xml" /index.php?main_page=news_rss&% last;
rewrite "^news/archive/?" /index.php?main_page=news_archive&% last;
rewrite "^news/([0-9]{4})-([0-9]{2})-([0-9]{2}).html" /index.php?main_page=news&date=$1-$2-$3&% last;
rewrite "^news/archive/([0-9]{4})-([0-9]{2}).html" /index.php?main_page=news_archive&date=$1-$2&% last;
rewrite "^news/(.*)-a-([0-9]+)-comments.html" /index.php?main_page=news_comments&article_id=$2&% last;
rewrite "^news/(.*)-a-([0-9]+).html" /index.php?main_page=news_article&article_id=$2&% last;
 
# All other pages
# Don't rewrite real files or directories
rewrite "^(.*).html" /index.php?main_page=$1&% last;

请注意这条Rewrite规则,这就是嵌套目录规则

rewrite ^/(.*)-c-([0-9]+)_([0-9]+)/$ /index.php?main_page=index&cPath=$2_$3&$args last;

附录,Wordpress安装在子目录时的Rewrite 规则

    location / {

    rewrite ^/blog/wp-admin$ /blog/wp-admin/ permanent;

    if (-f $request_filename/index.html){
        rewrite ^/blog/(.*) /blog/$1/index.html break;
    }

    if (-f $request_filename/index.php){
        rewrite ^/blog/(.*) /blog/$1/index.php;
    }

    if (!-f $request_filename){
        rewrite ^/blog/(.*) /blog/index.php;
    }
}

CSS JS loader Fatal error: require(): Cannot redeclare class minify_css_compressor

这个问题一般出现在 Zen Cart 加装了Numinix 出品的 CSS JS Loader (当前最新版本V2.2.1 Update added on: 2013-06-07 15:30:08) 与 Fast and Easy Checkout(当前最新版本V1.13.1 Update added on: 2013-08-17 16:56:57) 这个两个 Zen Cart 插件后。尤其是会出现在将货物加入到购物车,直到付款的过程中。
且出现的时候有一定的随机性,因此不容易被察觉,一般系统日志里记录了这个错误。

错误描述如下:
Fatal error: require(): Cannot redeclare class minify_css_compressor

Are you sure this is not a problem with your configuration? (ask on the
Google Group)

https://code.google.com/p/minify/issues/detail?id=281

Minify commit/version: 2.1.5
PHP version: 5.3.3

What steps will reproduce the problem?
1. Open /min/b=css&f=960/reset.css,960/text.css,960/960.css,style.css
2. Only white page.
2. ini_set(‘display_errors’, 1); in first line of config.php
3. Fatal error: require(): Cannot redeclare class minify_css_compressor in /min/lib/Minify/CSS.php on line 71
4. Fixed with:
解决办法,将所有需要调用外部文件的请求之前加个 类是否存在的判断 class_exists

require_once 'Minify/CSS/Compressor.php';

更改为

if(!class_exists('Minify_CSS_Compressor')) {
 require_once 'Minify/CSS/Compressor.php';
}

Expected output:

Actual output:
White page or Fatal error: require(): Cannot redeclare class minify_css_compressor in /home/domains/ticketpoint.nl/htdocs/min/lib/Minify/CSS.php on line 71

Dec 11, 2012 #1 ma…@qball.nl
Same problem with require_once ‘Minify/CommentPreserver.php’; and require_once ‘Minify/CSS/UriRewriter.php’; in CSS.php

要彻底解决类似问题。这个文件中一共有三处需要修改的地方

第二处:

require_once 'Minify/CommentPreserver.php';

更改为

                if (!class_exists('Minify_CommentPreserver')) {
                        require_once 'Minify/CommentPreserver.php';
                }

第三处:

require_once 'Minify/CSS/UriRewriter.php';

更改为

            if(!class_exists('Minify_CSS_UriRewriter')) {
                require_once 'Minify/CSS/UriRewriter.php';
            }

经过以上三次修改后,这个问题彻底解决。

BTW: 懒人福利,请直接下载这个css_php201309231128.tar.gz文件,放在安装 Zen Cart 程序的根目录,解压覆盖 /min/lib/Minify/CSS.php 即可

Zen Cart 库存状态设置策略

为了最大限度的利用已获得排名的产品的SEO权重,我们设置库存状态时,不能直接将产品的状态设置为 out of stock, 这样前台访问那个产品网址的时候会出现http 404 错误,也就是URL不存在的错误。 这样会导致你的这个状态调整为 out of stock 的产品排名迅速掉下去,无法为我们带来价值。

out of stock

out of stock

我们这样操作就好了。将产品库存数量调为0, 并在这个产品页面推荐其他相关的产品,这样达到既不损失流量,又能开展交叉销售的目的。这样对这个过时的产品URL的排名没有影响,而且能很好的传递产品URL的权重给在这个页面推荐的其他相关产品。

BTW,网站的运营要在细节上下工夫,用心琢磨了,就会有效果,或大或小而已!

Zen Cart 客户下单时间和订单更新时间与客户所在时区时间不一致调整

如果服务器所设置的时区和客户所在的时区不一致,就会导致PHP默认调用的系统时间错误,导致订单时间和客户的下单实际时间有差距。

此种情况特别合适 服务器或者VPS上放有多个站点,每个站点所面对的客户不一样。客户所在的时区不一样时。通过如下设置,将在客户注册下单时,提示的时间修改为何客户所在时区时间保持一致的情况。

涉及到要修改的文件列表:
./YOUR_ADMIN/includes/configure.php
./includes/configure.php

./YOUR_ADMIN/includes/functions/database.php
./YOUR_ADMIN/tracker.php
./YOUR_ADMIN/orders.php

./includes/functions/functions_general.php
./includes/modules/pages/login/header_php.php
./includes/modules/create_account.php

1,在前台与后台的配置文件中添加常量定义:

分别打开
./YOUR_ADMIN/includes/configure.php
./includes/configure.php

这两个文件

增加

define('TIME_ZONE_OFFSET', 7);

常量定义。

2,将相关文件中的

./YOUR_ADMIN/includes/functions/database.php
./YOUR_ADMIN/tracker.php
./YOUR_ADMIN/orders.php

./includes/functions/functions_general.php
./includes/modules/pages/login/header_php.php
./includes/modules/create_account.php

时间 now() ,修改为

date_add(now(), INTERVAL " . TIME_ZONE_OFFSET . " HOUR)

保存手工,完毕

增加Zen Cart V1.5.1管理后台登陆超时时间选项

Zen Cart V1.5.1版本管理后台,系统默认的超时时间为900秒,15分钟,比较短,有的时候为了开发方便,可以这样添加一些更长的时间选项

第一步:在你所使用的当前zen cart 的数据库中执行

SELECT * FROM configuration WHERE configuration_id=22

如果你的数据库为了安全,为数据表添加了前缀 zen_的话,应该是

SELECT * FROM zen_configuration WHERE configuration_id=22

在set_function 选项中,修改其值为

zen_cfg_select_option(array('10800', '7200', '3600', '900', '600', '300'), 

这样就增加了三个选项 分别为10800三个小时,7200两个小时,3600 一个小时

保存后,在后台刷新 然后到 Configuration -> My Store 中,选定 管理对话超时秒数

中文路径为 商店设置 -> 基本设置 中选定 管理对话超时秒数 选项,这时你就多出了几个时间选项,你可以选择一个你认为合适的时间选项,比如 7200 然后保存。