ramzes, да preg_replace и два массива
# Koenig (27.11.2015 / 16:39)
ramzes, да preg_replace и два массива
реврайт заипешься прописывать. не соблюдается даже порядок акт\мод\ид
не получается сделать его универсальным
# Koenig (27.11.2015 / 16:39)
ramzes, да preg_replace и два массива
перечислять все ссылки не вариант. надо именно разделять на элементы.
+ в хитаччесе писать много правил придется
+ фиксить потерю линков на статику, графику и стили
в общем, я начал, но дальше мне стало лень, т.к. чел который просил, сменил движок, продолжать нет смысла.
может кому пригодиццо
php (+/-)
<?php
/**
*/
define('REWRITE', true);
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/theme/'.$set_user['skin'].'/index.php')){
include($_SERVER['DOCUMENT_ROOT'].'/theme/'.$set_user['skin'].'/index.php');
}
function getRewritePattern(){
$pattern = array(
'#/users/profile\.php\?act=([a-z_]+)#',
'#profile\.php\?act=([a-z_]+)#',
'#profile\.php\?user=#',
'#(&|\?)user=#',
'#(&|\?)mod=#',
'#/(panel|forum)/index\.php\?act=([a-z_]+)&id=([\d]+)#',
'#/(panel|forum)/index\.php\?act=([a-z_]+)#',
'#forum/index\.php\?id=([\d]+)#',
'#&page=([\d]+)#',
'#../mail/index\.php\?act=([a-z_]+)#',
'#\.\./(files|images)#',
'#/&#'
);
$replace = array(
'/users/$1',
'/users/$1',
'/users/profile/',
'/',
'/mod.',
'/$1/act.$2/$3',
'/$1/act.$2',
'forum/$1',
'/page.$1',
'/mail/act.$1',
'/$1',
'/?'
);
preg_match('#^/([a-z]+)/#i', $_SERVER['REQUEST_URI'], $module);
switch($module[1]){
case 'forum':
$pattern[] = '#"index\.php"#';
$pattern[] = '#"index\.php\?id=([\d]+)"#';
$pattern[] = '#"index\.php\?id=([\d]+)&page=([\d]+)"#';
$pattern[] = '#"index\.php\?id=([\d]+)&start=([\d]+)"#';
$pattern[] = '#"\?id=([\d]+)"#';
$pattern[] = '#\&start=([\d]+)#';
$pattern[] = '#\&page=([\d]+)#';
$pattern[] = '#"index\.php\?act=([a-z_]+)"#';
$pattern[] = '#index\.php\?act=([a-z_]+)&id=([\d]+)#';
$pattern[] = '#\?act=([a-z_]+)&id=([\d]+)#';
$pattern[] = '#"search\.php"#';
$pattern[] = '#search\.php\?id=([\d]+)#';
$replace[] = '/forum/';
$replace[] = '/forum/$1';
$replace[] = '/forum/$1/page.$2';
$replace[] = '/forum/$1/start.$2';
$replace[] = '/forum/$1';
$replace[] = '/start.$1';
$replace[] = '/page.$1';
$replace[] = '/forum/act.$1';
$replace[] = '/forum/act.$1/$2';
$replace[] = '/forum/act.$1/$2';
$replace[] = '/forum/search';
$replace[] = '/forum/search/$1';
break;
case 'users':
break;
case 'panel':
$pattern[] = '#/panel/index.php?act=([a-z_]+)#';
$replace[] = '/panel/$1';
break;
case 'mail':
break;
}
return array(
'pattern' => $pattern,
'replace' => $replace
);
}
function rewriter_replace($content){
if(function_exists('theme_replace')){
$content = theme_replace($content);
}
if(REWRITE){
$data = getRewritePattern();
$content = preg_replace($data['pattern'], $data['replace'], $content);
}
return $content;
}
if(REWRITE){
if(strpos($_SERVER['REQUEST_URI'], '?')!=false AND isset($_SESSION['rePost'])){
preg_match('#(index|profile)\.php(.*)#', $_SERVER['REQUEST_URI'], $url);
header("Location: ".str_replace('"', '', rewriter_replace('"'.str_replace('&', '&', $url[0]).'"')));
}
if($_SERVER['REQUEST_METHOD']=='POST'){
$_SESSION['rePost'] = true;
if(isset($_SESSION['reset_ok'])){
$_SESSION['r__'] = array(
'key' => 'reset_ok',
'value' => $_SESSION['reset_ok']
);
}
if(isset($_SESSION['set_ok'])){
$_SESSION['r__'] = array(
'key' => 'set_ok',
'value' => $_SESSION['set_ok']
);
}
}else if(isset($_SESSION['rePost'])){
if(isset($_SESSION['r__'])){
$_SESSION[$_SESSION['r__']['key']] = $_SESSION['r__']['value'];
unset($_SESSION['r__']);
}
unset($_SESSION['rePost']);
}
}
htaccess (+/-)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# panel
RewriteRule ^panel/([a-z_]+)$ /panel/index.php?act=$1 [L,QSA]
RewriteRule ^panel/([a-z_]+)/mod.([a-z_]+)$ /panel/index.php?act=$1&mod=$2 [L,QSA]
RewriteRule ^panel/([a-z_]+)/mod.([a-z_]+)$ /panel/index.php?act=$1&mod=$2 [L,QSA]
RewriteRule ^panel/([a-z_]+)/mod.([a-z_]+)/id\.([\d]+)$ /panel/index.php?act=$1&mod=$2&id=$3 [L,QSA]
#forum
RewriteRule ^forum/([\d]+)$ /forum/?id=$1 [L,QSA]
RewriteRule ^forum/act\.([a-z_]+)$ /forum/?act=$1 [L,QSA]
RewriteRule ^forum/act\.([a-z_]+)/([\d]+)$ /forum/?act=$1&id=$2 [L,QSA]
RewriteRule ^forum/([\d]+)/page.([\d]+)$ /forum/?id=$1&page=$2 [L,QSA]
RewriteRule ^forum/([\d]+)/start.([\d]+)$ /forum/?id=$1&start=$2 [L,QSA]
RewriteRule ^forum/act\.([a-z_]+)/([\d]+)/(start|page)\.([\d]+)$ /forum/?act=$1&id=$2&$3=$4 [L,QSA]
RewriteRule ^forum/search$ /forum/search.php [L,QSA]
RewriteRule ^forum/search/([\d]+)$ /forum/search.php?id=$1 [L,QSA]
#users
RewriteRule ^users/([a-z]+)$ /users/profile.php?act=$1 [L,QSA]
RewriteRule ^users/([a-z]+)/([\d]+)$ /users/profile.php?act=$1&user=$2 [L,QSA]
RewriteRule ^users/([a-z]+)/page.([\d]+)$ /users/profile.php?act=$1&page=$2 [L,QSA]
RewriteRule ^users/([a-z]+)/([\d+])/page.([\d]+)$ /users/profile.php?act=$1&user=$2&page=$3 [L,QSA]
RewriteRule ^users/([a-z_]+)/(mod|id|user)\.([a-z_]+)$ /users/profile.php?act=$1&$2=$3 [L,QSA]
RewriteRule ^users/([a-z_]+)/(mod|id|user)\.([a-z_]+)/([\d]+)$ /users/profile.php?act=$1&$2=$3&user=$4 [L,QSA]
RewriteRule ^users/([a-z_]+)/(mod|id|user)\.([a-z_]+)/([\d]+)/page.([\d]+)$ /users/profile.php?act=$1&$2=$3&user=$4&page=$5 [L,QSA]
RewriteRule ^users/([a-z]+)/([\d]+)/([a-z\d]+)$ /users/profile.php?act=$1&user=$2&type=$3 [L,QSA]
#mail
RewriteRule ^mail/act\.([a-z]+)$ /mail/?act=$1 [L,QSA]
#other
RewriteRule /user\.([\d]+)$ &user=$1 [L,QSA]
RewriteRule id/([\d]+)$ &id=$1 [L,QSA]
RewriteRule page.([\d]+)$ &page=$1 [L,QSA]
</IfModule>
ramzes, что то опять отступы побило
ramzes, спасибо. Очень интересно. Буду изучать и к себе прикручивать
Intelligent, он незаконченный. там надо додумывать логику, т.к. реврайт не железно прописан, а что то типа микро-правил.
для профиля, для форума, и т.д.
__
отступы не побило, это я так копировал неудачно
# ramzes (21.12.2015 / 13:18)
Intelligent, он незаконченный. там надо додумывать логику, т.к. реврайт не железно прописан, а что то типа микро-правил.
для профиля, для форума, и т.д.
__
отступы не побило, это я так копировал н
Рамзес пж закончи код)оч нужно
слишком много гемора, оно того не стоит. в частности надо перехватывать все редиректы после _пост и перенаправлять, это реально геморно, я недостаточно хорошо знаю джон, что бы отловить все такие моменты
Никто из вас не может сделать ЧПУ ссылки для джона? )
Смотрите как эти обычные непонятные длинные ссылочки ссылки портят все)
наверное многие на это не обращают внимания но меня это очень раздражает честно)
и мой сайт не вап тематики, а форум интернет магазина