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 客户下单时间和订单更新时间与客户所在时区时间不一致调整

如果服务器所设置的时区和客户所在的时区不一致,就会导致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 然后保存。

为Zen Cart后台的编辑器改变存储路径,以防止安全隐患

Zen Cart 编辑器如果是采取默认的安全路径,则会或多或少存在安全隐患,从已知的暴露出来的开源编辑器漏洞到各种未知隐患。

为了防范编辑器漏洞,改变默认的安装路径名称是很有必要的

第一步:定义一个常量

在路径admin/includes/configure.php 文章中添加一个路径的常量定义:记得将 the new name of your folder 改成你自己的编辑器目录存放路径,比如de

define('DIR_WS_EDITORS', 'ed/');

第二步:将 Zen Cart 根目录下的 editors 改名为 ed

第三步:改掉后台烦人的默认编辑器路径不存在的提示:

You have an HTML editor selected in ‘My Store’ but the ‘/editors/’ folder cannot be located. Please disable your selection or move your editor files into the ‘/editors/’ folder

打开 your_admin/includes/header.php 文件,搜索

ERROR_EDITORS_FOLDER_NOT_FOUND

// Editor alerts
  if (HTML_EDITOR_PREFERENCE != 'NONE' && !is_dir(DIR_FS_CATALOG . 'editors')) {
    $messageStack->add(ERROR_EDITORS_FOLDER_NOT_FOUND, 'caution');
  }

替换为

// Editor alerts
  if (HTML_EDITOR_PREFERENCE != 'NONE' && !is_dir(DIR_FS_CATALOG . DIR_WS_EDITORS)) {
    $messageStack->add(ERROR_EDITORS_FOLDER_NOT_FOUND, 'caution');
  }

OK 后台警告提示解决

到此,编辑器添加完成