- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте уважаемые. Помогите пожалуйста разобраться делаю чпу для интернет магазина название товара при добавлении пропускаю через функцию транслитерации и записываю в таблицу. Потом подключаю эту таблицу ссылка получается такого вида
http://test1.ru/shop/item-ob-yavlenie-budet-vydeleno-krasnym-cvetom-i-budet-otobrazheno-srazu-posle-nazvaniya-tovara-ob-yavlenie-ne-mozhet-byt-dlinnee-chem-100-simvolov-100000.html
Проблема вот в чем когда в транслите нет цифр то все отлично работает, а с цифрами нет.
Есть 2 файла которые обрабатывают эти ссылки.
Первый
function url($act = '', $op = '', $args = array(), $model = false, $site_url = ''){
//伪静态文件扩展名
$ext = '.html';
//入口文件名
$file = 'index.php';
// $site_url = empty($site_url) ? SHOP_SITE_URL : $site_url;
$act = trim($act);
$op = trim($op);
$args = !is_array($args) ? array() : $args;
//定义变量存放返回url
$url_string = '';
if (empty($act) && empty($op) && empty($args)) {
return $site_url;
}
$act = !empty($act) ? $act : 'index';
$op = !empty($op) ? $op : 'index';
$model = $model ? URL_MODEL : $model;
if ($model) {
//伪静态模式
$url_perfix = "{$act}-{$op}";
if (!empty($args)){
$url_perfix .= '-';
}
$url_string = $url_perfix.http_build_query($args,'','-').$ext;
$url_string = str_replace('=','-',$url_string);
}else {
//默认路由模式
$url_perfix = "act={$act}&op={$op}";
if (!empty($args)){
$url_perfix .= '&';
}
$url_string = $file.'?'.$url_perfix.http_build_query($args);
}
//将商品、店铺、分类、品牌、文章自动生成的伪静态URL使用短URL代替
$reg_match_from = array(
'/^goods-index-goods_translit-([a-z0-9-]+)-goods_id-([0-9]*)\.html$/', //делаю так
'/^show_store-index-store_id-(\d+)\.html$/',
'/^show_store-goods_all-store_id-(\d+)-stc_id-(\d+)-key-([0-5])-order-([0-2])-curpage-(\d+)\.html$/',
'/^article-show-article_id-(\d+)\.html$/',
'/^article-article-ac_id-(\d+)\.html$/',
'/^document-index-code-([a-z_]+)\.html$/',
'/^search-index-cate_id-(\d+)-b_id-([0-9_]+)-a_id-([0-9_]+)-key-([0-3])-order-([0-2])-type-([0-2])-area_id-(\d+)-curpage-(\d+)\.html$/',
'/^brand-list-brand-(\d+)-key-([0-3])-order-([0-2])-type-([0-2])-area_id-(\d+)-curpage-(\d+)\.html$/',
'/^brand-index\.html$/',
'/^show_groupbuy-index-area_id-(\d+)-groupbuy_class-(\d+)-groupbuy_price-(\d+)-groupbuy_order_key-(\d+)-groupbuy_order-(\d+)-curpage-(\d+)\.html$/',
'/^show_groupbuy-groupbuy_soon-area_id-(\d+)-groupbuy_class-(\d+)-groupbuy_price-(\d+)-groupbuy_order_key-(\d+)-groupbuy_order-(\d+)-curpage-(\d+)\.html$/',
'/^show_groupbuy-groupbuy_history-area_id-(\d+)-groupbuy_class-(\d+)-groupbuy_price-(\d+)-groupbuy_order_key-(\d+)-groupbuy_order-(\d+)-curpage-(\d+)\.html$/',
'/^show_groupbuy-groupbuy_detail-group_id-(\d+).html$/',
'/^pointprod-index.html$/',
'/^pointprod-plist.html$/',
'/^pointprod-pinfo-id-(\d+).html$/',
'/^pointvoucher-index.html$/',
'/^goods-comments_list-goods_id-(\d+)-type-([0-3])-curpage-(\d+).html$/'
);
$reg_match_to = array(
'item-\\1-\\2.html',
'shop-\\1.html',
'shop_view-\\1-\\2-\\3-\\4-\\5.html',
'article-\\1.html',
'article_cate-\\1.html',
'document-\\1.html',
'cate-\\1-\\2-\\3-\\4-\\5-\\6-\\7-\\8.html',
'brand-\\1-\\2-\\3-\\4-\\5-\\6.html',
'brand.html',
'groupbuy-\\1-\\2-\\3-\\4-\\5-\\6.html',
'groupbuy_soon-\\1-\\2-\\3-\\4-\\5-\\6.html',
'groupbuy_history-\\1-\\2-\\3-\\4-\\5-\\6.html',
'groupbuy_detail-\\1.html',
'integral.html',
'integral_list.html',
'integral_item-\\1.html',
'voucher.html',
'comments-\\1-\\2-\\3.html'
);
$url_string = preg_replace($reg_match_from,$reg_match_to,$url_string);
return rtrim($site_url,'/').'/'.$url_string;
}
Второй
class Route {
/**
* PATH_INFO 分隔符
*
* @var string
*/
private $_pathinfo_split = '-';
/**
* 系统配置信息
*
* @var array
*/
private $_config = array();
/**
* PATH_INFO内容分隔正则
*
* @var string
*/
private $_pathinfo_pattern = '';
/**
* 伪静态文件扩展名
*
* @var string
*/
private $_rewrite_extname = '.html';
/**
* 构造方法
*
*/
public function __construct($config = array()) {
$this->_config = $config;
$this->_pathinfo_pattern = "/{$this->_pathinfo_split}/";
$this->parseRule();
}
/**
* 路由解析
*
*/
public function parseRule() {
if ($this->_config['url_model']) {
$this->_parseRuleRewrite();
} else {
$this->_parseRuleNormal();
}
}
/**
* 默认URL模式
*
*/
private function _parseRuleNormal() {
//不进行任何处理
}
/**
* 伪静态模式
*
*/
private function _parseRuleRewrite() {
$path_info = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : $_SERVER['REDIRECT_REDIRECT_PATH_INFO'];
$path_info = trim($path_info,'/');
//如果为二级目录去掉目录信息
if(strpos($path_info, '/')) {
$path_info_array = explode('/', $path_info);
$path_info = end($path_info_array);
}
if (!empty($path_info) && $path_info != 'index.php' && strpos($path_info, $this->_rewrite_extname)){
//去掉伪静态扩展名
$path_info = substr($path_info,0,-strlen($this->_rewrite_extname));
//根据不同APP匹配url规则
$path_info_function = '_' . APP_ID . 'PathInfo';
$path_info = $this->$path_info_function($path_info);
$split_array = preg_split($this->_pathinfo_pattern,$path_info);
//act,op强制赋值
$_GET['act'] = isset($split_array[0]) ? $split_array[0] : 'index';
$_GET['op'] = isset($split_array[1]) ? $split_array[1] : 'index';
unset($split_array[0]);
unset($split_array[1]);
//其它参数也放入$_GET
while (current($split_array) !== false) {
$name = current($split_array);
$value = next($split_array);
$_GET[$name] = $value;
if (next($split_array) === false){
break;
}
}
} else {
$_GET['act'] = $_GET['op'] = 'index';
}
}
/**
* 商城短网址还原成长网址
* @param unknown $path_info
* @return mixed
*/
private function _shopPathInfo($path_info) {
$reg_match_from = array(
'/^item-([a-z0-9-]+)-([0-9]*)$/',
'/^shop-(\d+)$/',
'/^shop_view-(\d+)-(\d+)-([0-5])-([0-2])-(\d+)$/',
'/^article-(\d+)$/',
'/^article_cate-(\d+)$/',
'/^document-([a-z_]+)$/',
'/^cate-(\d+)-([0-9_]+)-([0-9_]+)-([0-3])-([0-2])-([0-2])-(\d+)-(\d+)$/',
'/^brand-(\d+)-([0-3])-([0-2])-([0-2])-(\d+)-(\d+)$/',
'/^brand$/',
'/^groupbuy-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)$/',
'/^groupbuy_soon-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)$/',
'/^groupbuy_history-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)$/',
'/^groupbuy_detail-(\d+)$/',
'/^integral$/',
'/^integral_list$/',
'/^integral_item-(\d+)$/',
'/^voucher$/',
'/^comments-(\d+)-([0-3])-(\d+)$/'
);
$reg_match_to = array(
'goods-index-goods_translit-\\1-goods_id-\\2',
'show_store-index-store_id-\\1',
'show_store-goods_all-store_id-\\1-stc_id-\\2-key-\\3-order-\\4-curpage-\\5',
'article-show-article_id-\\1',
'article-article-ac_id-\\1',
'document-index-code-\\1',
'search-index-cate_id-\\1-b_id-\\2-a_id-\\3-key-\\4-order-\\5-type-\\6-area_id-\\7-curpage-\\8',
'brand-list-brand-\\1-key-\\2-order-\\3-type-\\4-area_id-\\5-curpage-\\6',
'brand-index',
'show_groupbuy-index-area_id-\\1-groupbuy_class-\\2-groupbuy_price-\\3-groupbuy_order_key-\\4-groupbuy_order-\\5-curpage-\\6',
'show_groupbuy-groupbuy_soon-area_id-\\1-groupbuy_class-\\2-groupbuy_price-\\3-groupbuy_order_key-\\4-groupbuy_order-\\5-curpage-\\6',
'show_groupbuy-groupbuy_history-area_id-\\1-groupbuy_class-\\2-groupbuy_price-\\3-groupbuy_order_key-\\4-groupbuy_order-\\5-curpage-\\6',
'show_groupbuy-groupbuy_detail-group_id-\\1',
'pointprod-index',
'pointprod-plist',
'pointprod-pinfo-id-\\1',
'pointvoucher-index',
'goods-comments_list-goods_id-\\1-type-\\2-curpage-\\3'
);
return preg_replace($reg_match_from,$reg_match_to,$path_info);
}
/**
* CMS短网址还原成长网址
* @param unknown $path_info
* @return mixed
*/
private function _cmsPathInfo($path_info) {
$reg_match_from = array(
'/^article-(\d+)$/',
'/^picture-(\d+)$/'
);
$reg_match_to = array(
'article-article_detail-article_id-\\1',
'picture-picture_detail-picture_id-\\1'
);
return preg_replace($reg_match_from,$reg_match_to,$path_info);
}
}
И файл .htaccess такого вида
Проблема скорее не в цифрах а в -, попробуйте в транслите заменять пробелы на _ а не на -.
Или регулярки переделайте.
К сожалению так не работает. Точнее ссылка работает но она такого вида http://test1.ru/shop/goods-index-goods_translit-ob_yavlenie_budet_vydeleno_krasnym_cvetom_i_budet_otobrazheno_srazu_posle_nazvaniya_tovara_ob_yavlenie_ne_mozhet_byt_dlinnee_chem_100_simvolov-goods_id-100000.html
---------- Добавлено 28.05.2014 в 18:42 ----------
Или регулярки переделайте.
Как это сделать подскажите пожалуйста?
Проблема вот в чем когда в транслите нет цифр то все отлично работает, а с цифрами нет.
Кажется явно не хватает .html
Регулярки это наверное вот это?
function getNchash(){
if (C('captcha_status_login')){
return substr(md5(SHOP_SITE_URL.$_GET['act'].$_GET['op']),0,8);
} else {
return '';
}
}
/**
* 加密函数
*
* @param string $txt 需要加密的字符串
* @param string $key 密钥
* @return string 返回加密结果
*/
function encrypt($txt, $key = ''){
if (empty($txt)) return $txt;
if (empty($key)) $key = md5(MD5_KEY);
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
$ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
$nh1 = rand(0,64);
$nh2 = rand(0,64);
$nh3 = rand(0,64);
$ch1 = $chars{$nh1};
$ch2 = $chars{$nh2};
$ch3 = $chars{$nh3};
$nhnum = $nh1 + $nh2 + $nh3;
$knum = 0;$i = 0;
while(isset($key{$i})) $knum +=ord($key{$i++});
$mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum%8,$knum%8 + 16);
$txt = base64_encode(time().'_'.$txt);
$txt = str_replace(array('+','/','='),array('-','_','.'),$txt);
$tmp = '';
$j=0;$k = 0;
$tlen = strlen($txt);
$klen = strlen($mdKey);
for ($i=0; $i<$tlen; $i++) {
$k = $k == $klen ? 0 : $k;
$j = ($nhnum+strpos($chars,$txt{$i})+ord($mdKey{$k++}))%64;
$tmp .= $chars{$j};
}
$tmplen = strlen($tmp);
$tmp = substr_replace($tmp,$ch3,$nh2 % ++$tmplen,0);
$tmp = substr_replace($tmp,$ch2,$nh1 % ++$tmplen,0);
$tmp = substr_replace($tmp,$ch1,$knum % ++$tmplen,0);
return $tmp;
}
/**
* 解密函数
*
* @param string $txt 需要解密的字符串
* @param string $key 密匙
* @return string 字符串类型的返回结果
*/
function decrypt($txt, $key = '', $ttl = 0){
if (empty($txt)) return $txt;
if (empty($key)) $key = md5(MD5_KEY);
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
$ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
$knum = 0;$i = 0;
$tlen = @strlen($txt);
while(isset($key{$i})) $knum +=ord($key{$i++});
$ch1 = @$txt{$knum % $tlen};
$nh1 = strpos($chars,$ch1);
$txt = @substr_replace($txt,'',$knum % $tlen--,1);
$ch2 = @$txt{$nh1 % $tlen};
$nh2 = @strpos($chars,$ch2);
$txt = @substr_replace($txt,'',$nh1 % $tlen--,1);
$ch3 = @$txt{$nh2 % $tlen};
$nh3 = @strpos($chars,$ch3);
$txt = @substr_replace($txt,'',$nh2 % $tlen--,1);
$nhnum = $nh1 + $nh2 + $nh3;
$mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum % 8,$knum % 8 + 16);
$tmp = '';
$j=0; $k = 0;
$tlen = @strlen($txt);
$klen = @strlen($mdKey);
for ($i=0; $i<$tlen; $i++) {
$k = $k == $klen ? 0 : $k;
$j = strpos($chars,$txt{$i})-$nhnum - ord($mdKey{$k++});
while ($j<0) $j+=64;
$tmp .= $chars{$j};
}
$tmp = str_replace(array('-','_','.'),array('+','/','='),$tmp);
$tmp = trim(base64_decode($tmp));
if (preg_match("/\d{10}_/s",substr($tmp,0,11))){
if ($ttl > 0 && (time() - substr($tmp,0,11) > $ttl)){
$tmp = null;
}else{
$tmp = substr($tmp,11);
}
}
return $tmp;
}
/**
* 取得IP
*
*
* @return string 字符串类型的返回结果
*/
function getIp(){
if (@$_SERVER['HTTP_CLIENT_IP'] && $_SERVER['HTTP_CLIENT_IP']!='unknown') {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (@$_SERVER['HTTP_X_FORWARDED_FOR'] && $_SERVER['HTTP_X_FORWARDED_FOR']!='unknown') {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match('/^\d[\d.]+\d$/', $ip) ? $ip : '';
}
---------- Добавлено 28.05.2014 в 19:45 ----------
изначально было так. Но я только что подставлял все равно так же url без цифр работает а с цифрами показывает что товар убран или не существует.
---------- Добавлено 28.05.2014 в 19:59 ----------
Всем спасибо добрые люди я сам разобрался. Там оказывается ссылка в базу записывалась а я формат не изменил.