Вопрос по DLE и Категории

1q2w3
На сайте с 12.11.2010
Offline
108
739

Приветствую, помогите разобраться, как сделать. Суть проблемы есть категории и подкатегории они имеют вид:

www.site/category1

www.site/category1/category2

www.site/category1/category2/category3

Появились дубли, т.к. страница открывается www.site/category3 и так www.site/category1/category2/category3 . Как сделать редирект, чтобы был только так www.site/category3 . Категорий на сайте тыщи, поэтому каждую не пропишешь. Как будет сама новость выводиться, мне без разницы, они отдельно не выводятся. ЧПУ стоит Тип1. Заранее спасибо!

LeeeV
На сайте с 13.04.2010
Offline
23
#1

Попробуйте сделать так:

В файле /engine/engine.php найдите

if ($do == "cat" and $category != '' and $subaction == '') {

и ниже добавьте

if( $config['allow_alt_url'] == "yes" AND $category_id AND $view_template != "rss") {


$re_cat = get_url( $category_id );

if ($re_cat != $_GET['category'] OR substr ( $_SERVER['REQUEST_URI'], - 1, 1 ) != '/' ) {
$re_url = explode ( "index.php", strtolower ( $_SERVER['PHP_SELF'] ) );
$re_url = reset ( $re_url );

header("HTTP/1.0 301 Moved Permanently");
header("Location: {$re_url}{$re_cat}/");
die("Redirect");
}
}
siv1987
На сайте с 02.04.2009
Offline
427
#2

топорный вариант, но по хорошему такие редиректы должны делаться в скрипте

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^.+/([^/]+/[^/]+)$ /$1 [R=301,L]

добавить после rewriteBase

1q2w3
На сайте с 12.11.2010
Offline
108
#3
LeeeV:
Попробуйте сделать так:
В файле /engine/engine.php найдите
if ($do == "cat" and $category != '' and $subaction == '') {

и ниже добавьте
if( $config['allow_alt_url'] == "yes" AND $category_id AND $view_template != "rss") {


$re_cat = get_url( $category_id );

if ($re_cat != $_GET['category'] OR substr ( $_SERVER['REQUEST_URI'], - 1, 1 ) != '/' ) {
$re_url = explode ( "index.php", strtolower ( $_SERVER['PHP_SELF'] ) );
$re_url = reset ( $re_url );

header("HTTP/1.0 301 Moved Permanently");
header("Location: {$re_url}{$re_cat}/");
die("Redirect");
}
}

Не совсем то, что хотел, получается редирект на длинный вариант.

siv1987:
топорный вариант, но по хорошему такие редиректы должны делаться в скрипте
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.+/([^/]+/[^/]+)$ /$1 [R=301,L]

добавить после rewriteBase

не работает так.

siv1987
На сайте с 02.04.2009
Offline
427
#4
1q2w3:
не работает так.

Что значит не работает? Я проверил и все "работает". /cat1/cat2/cat3/news.html редиректит на /cat3/news.html

Хотя судя по тому что вы там категории написали без закрывающего слеша, есть смысл добавить в конце паттерна \.html

1q2w3:
Появились дубли, т.к. страница открывается www.site/category3 и так www.site/category1/category2/category3 .

Лол. А у вас там случайно не относительные адреса?

1q2w3
На сайте с 12.11.2010
Offline
108
#5
siv1987:
Что значит не работает? Я проверил и все "работает". /cat1/cat2/cat3/news.html редиректит на /cat3/news.html

Хотя судя по тому что вы там категории написали без закрывающего слеша, есть смысл добавить в конце паттерна \.html


Лол. А у вас там случайно не относительные адреса?

Да причём тут html, на сайте нет полных новостей они отключены. В принципе, как предложил LeeeV меня это устраивает, но в идеале, хотелось бы, чтобы был урл короче, не site/cat1/cat2/cat3/cat4/, а просто site/cat4/

Ещё есть вопрос, по {link-category}, как сделать так, чтобы выводилась, только подкатегория, а не категория -> подкатегория.

siv1987
На сайте с 02.04.2009
Offline
427
#6
1q2w3:
В принципе, как предложил LeeeV меня это устраивает, но в идеале, хотелось бы, чтобы был урл короче, не site/cat1/cat2/cat3/cat4/, а просто site/cat4/

Если вас устраивает, тогда делайте как предложил LeeeV, если речь только про категории и нужно то добавьте перед $ - /?

LeeeV
На сайте с 13.04.2010
Offline
23
#7
1q2w3:
Ещё есть вопрос, по {link-category}, как сделать так, чтобы выводилась, только подкатегория, а не категория -> подкатегория.

В файле engine/modules/functions.php найдите код

if( $config['allow_alt_url'] == "yes" ) $list = "<a href=\"" . $config['http_home_url'] . get_url( $parent_id ) . "/\">{$cat_info[$parent_id]['name']}</a>" . " » " . $list;

else $list = "<a href=\"$PHP_SELF?do=cat&category={$cat_info[$parent_id]['alt_name']}\">{$cat_info[$parent_id]['name']}</a>" . " » " . $list;

и замените на

if( $config['allow_alt_url'] == "yes" ) $list = "<a href=\"" . $config['http_home_url'] . get_url( $parent_id ) . "/\"></a>" . $list;

else $list = "<a href=\"$PHP_SELF?do=cat&category={$cat_info[$parent_id]['alt_name']}\"></a>". $list;

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий