Zen Cart产品页面301跳转,最模板修改的是下面这个文件:
1 |
includes/modules/pages/product_info/main_template_vars.php |
定位到下面的代码:
1 |
require (DIR_WS_MODULES . zen_get_module_directory( 'product_prev_next.php' )); |
3 |
$products_name = $product_info ->fields[ 'products_name' ]; |
替换为:
01 |
require (DIR_WS_MODULES . zen_get_module_directory( 'product_prev_next.php' )); |
03 |
$products_id = $product_info ->fields[ 'products_id' ]; |
04 |
$products_name = $product_info ->fields[ 'products_name' ]; |
10 |
if (! empty ( $products_name )) { |
11 |
$rel_url = HTTP_SERVER . '/' . xen_encode_product_name( $products_name ) . '_p' . $products_id . '.html' ; |
12 |
$req_url = HTTP_SERVER . $_SERVER [ 'REQUEST_URI' ]; |
14 |
if ( $rel_url != $req_url ) { |
15 |
$msg = "{$req_url} :to: {$rel_url}\n" ; |
16 |
$logfile = DIR_FS_CATALOG . 'log301.txt' ; |
17 |
error_log ( $msg , 3, $logfile ); |
18 |
header( 'HTTP/1.1 301 Moved Permanently' ); |
19 |
header( "Location: " . $rel_url ); |
23 |
$msg = $_SERVER [ 'REQUEST_URI' ] . "\n" ; |
24 |
$logfile = DIR_FS_CATALOG . 'log404.txt' ; |
25 |
error_log ( $msg , 3, $logfile ); |
29 |
function xen_encode_product_name( $str ) { |
30 |
$str = strtolower (preg_replace( '/[^a-z0-9 ]/i' , '' , $str )); |
31 |
$str = strtolower (preg_replace( '/\W+/' , '-' , $str )); |
33 |
while ( strpos ( $str , '--' ) !== false) { |
34 |
$str = str_replace ( '--' , '-' , $str ); |
37 |
return trim( $str , '-' ); |
上面的301跳转代码的思路是:首先,根据数据库中的Product ID, Product Name,来组合成一个实际的URL。然后,和用户请求的URL比较,如果两者不相等,则执行301跳转。另外增加了一些调试log,分别是网站根目录下的log301.txt, log404.txt,这样可以方便检测到301跳转的正确与否。对于不存在的产品URL,也记录在日志中了。不需要的时候,可以注释掉。
为了减小对Zen Cart性能的影响,可以在一段时间过后,去掉301跳转这部分逻辑。只需要修改开关变量,如下:
相关话题: (责任编辑:最模板) |