Добавляем в settings.php функцию вида:
<?php
function custom_url_rewrite($op, $result, $path) {
global $user;
if ($op == 'alias') {
if($result != $path) return $result; // there was result already
// Overwrite a menu path already defined, with this code, if the user
// goes to 'tracker', the page 'views/tracker' will be displayed instead
// without any redirection. To achieve this, only the op source act is a
// must, this is optional.
if ($path == 'views/tracker') {
return 'tracker';
}
// Change all 'node' to 'article'.
if (preg_match('|^node/(.*)|', $path, $matches)) {
return 'article/'. $matches[1] . '.html';
}
// Create a path called 'e' which lands the user on her edit page.
if ($path == 'user/'. $user->uid .'/edit') {
return 'e';
}
}
if ($op == 'source') {
if ($path == 'tracker') {
// Change 'tracker' to 'views/tracker' when a request lands.
return 'views/tracker';
}
// Change all 'node' to 'article'.
if (preg_match('|^article(/.*).html|', $path, $matches)) {
return 'node'. $matches[1];
}
// Create a path called 'e' which lands the user on her edit page.
if ($path == 'e') {
return 'user/'. $user->uid .'/edit';
}
}
// Do not forget to return $result!
return $result;
}
?>
и имeем пути не вида node/xxx а вида article/xxx.html
кому то будет удобно.
Комментарии
Угу. Стоит отметить, что в Drupal 6 эту функцию разбили на две.
custom_url_rewrite_inbound() - для преобразования входящих запросов
custom_url_rewrite_outbound() - для представления путей в строке броузера
один путь к сокрытию движка закрыт
осталось закрыть стандартные user
Дык, с помощью этой же функции и пути user можно перекрыть... А при помощи функций темизации можно изменить профиль до неузнаваимости.
Это для 6-го тоже работает?
для 6ки не работает. там по другому. тебе выше сказали
Туплю, сорри.
Будем маскироваться под Джумлу?
Drupal рулит
а смысл?
эммм.... да можно
Исключительно из спортивного интереса, чтобы попасть на выставку сайтов сделанных на Джумле.
мне положительно положить на выставки. главное чтобы клиент и посетители были довольны
Статью в книгу!
Отличное решение. Подшил в книгу.
Мне кажется, что скрыть характерные для Drupal штучки может быть полезно с точки зрения безопасности, а не для маскировки под Джумлу and etc.
Вот что ещё можно сделать в этом направлени: Скрыть версию Друпал.
Спасибо, пригодится
спасибо, полезно
Вопрос, как сделать на работающем сайте
Не поломаются для поисковиков пути?
На индексации это не скажется?
vitalikis это вопросы безопасности. Кто-нибудь будет ломать сайт на Джумле, а окажется что это Друпал
ну мне было по приколу чучуть изменить пути...
пример взят из доки кроме одного ифа:
if($result != $path) return $result; // there was result already
если его не добавить алиасы друпала не будут работать )
Мне кажется здесь ошибочка закралась:
<?php
// Change all 'node' to 'article'.
if (preg_match('|^article(/.*).html|', $path, $matches)) {
return 'node'. $matches[1];
}
?>
В комментарии говорится, что node меняется на article а возврат идет node.
Или я чего не понял?
А вообще то множественные ифы очень трудно читаются, а если еще учитывать что всегда сравнивается одна переменная $path, то логичней было бы использовать switch() case '': конструкцию
Во первых, конструкция switch() case '': вычисляется только один раз, а вот if() {} вычисляется каждый раз при вызове.
Во вторых, просто читается легче.
seaji не думаю что switch case вычисляется один раз, это тот же if в оболочке.
Полезное решение, иногда очень нужно максимально скрыть движок сайта.
Только я бы preg_match переписал бы на substr — должно быстрее работать, а функция вызывается очень часто. Кто-нибудь скорость проверял профайлером?
на ноуте, который верой и правдой служит 2 года
интересная идея, спасибо
интересная идея, спасибо
а в 6-м тоже так?
Бросай курить и смотри комменты
ага, спасибо
Спасибо!
этим способом можно так же заменить taxonomy/term/NN на category/NN ?
ну да. дорисовываете свои регулярки туда. наслаждаетесь
То что нужно. А можно как-нибудь сделать чтобы при прямом просмотре node/$ выдавало ошибку 404, но замена article/$ при этом работала?
С помощью данного метода можно site.ru/node/55 преобразовать в site.ru/55 ?
а вы подумайте.