Регистрация
Вход через соцсети
Восстановление пароля

"Спецам" неткета, вопрос на засыпку )

Новый топик
Страницы: 1  |  2
15.07.2010, 15:30
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

Как создать страничку с адресом http://mydomen.ru/mypage.html ?

Temet nosce...
15.07.2010, 16:00
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

Обсуждали мы как то эту тему, к примеру Ссылка

Пришли к тому, что если не лезть в код системы то это можно сделать 2 способами:
1. В нужном компоненте в действии после добавления, изменения, удаления физически создавать на хостинге файл с нужным содержанием.
2. Написать в .htaccess условие с пере направлением подобных ссылок на свой файл обработчик, а в нем уже s_list_class подтягивать нужный контент
15.07.2010, 16:37
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

В этом частном случае более простой вариант - это создать страничку mypage.html ручками.

Цитата:
1. В нужном компоненте в действии после добавления, изменения, удаления физически создавать на хостинге файл с нужным содержанием.

Ограниченный вариант. Подойдет, если на странице будет выводиться только содержание записи этого компонента. Если на странице есть меню разделов и прочий динамический контент, то придется пересоздавать такую страничку с каждым изменением контента.

Цитата:
2. Написать в .htaccess условие с пере направлением подобных ссылок на свой файл обработчик, а в нем уже s_list_class подтягивать нужный контент

Это вариант для программистов. А конечному пользователю это увы недоступно.

В итоге возникает вопрос - почему такой навороченный движок как неткет не позволяет сделать такую казалось бы банальную вещь?

По сути ведь решение банально - в неткетовском обработчике дописать логику, которая бы при запросе страниц http://mydomen.ru/mypage.html выдавала страницы от "титула", который назначен в настройках сайта: http://mydomen.ru/index/mypage.html , ну а если у титула такой записи нет, то уже 404 ошибку.

Temet nosce...
15.07.2010, 17:16
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

Полностью согласен, задавал этот вопрос о ЧПУ Васильеву Дмитрию. + к этой теме о возможности полностью избавится от параметров в адресной строке (при навигации по страницам и т.д.), но как я понял в ближайшее время он решен не будет.

По вашему вопросу:
Цитата:
Ограниченный вариант. Подойдет, если на странице будет выводиться только содержание записи этого компонента. Если на странице есть меню разделов и прочий динамический контент, то придется пересоздавать такую страничку с каждым изменением контента.

вовсе нет, была как то давно тема "Макет диза в внешний скрипт":
Код:
<?
$sub=775;
$template=1;
$action = "index";
$passed_thru_404=1;
if (!isset($SETTINGS_LOADED)) require "../../vars.inc.php";
require $INCLUDE_FOLDER."index.php";
eval("echo \"$template_header\";");

/* КОНТЕНТ */

eval("echo \"$template_footer\";");
?>

То есть по сути нам нужно создать файл, сохранить в него контент и id макета дизайна и id раздела чтобы построить цепочку навигации.
Ну и:
Чтобы сервер читал php в .htm файлах прописываем в .htaccess (говорят при большой посещаемости может тормозить сайт)
Код:
RemoveHandler .htm
AddType application/x-httpd-php .php .htm


Только вот этот способ скорее всего сработает если мы будем писать файлики в корень сервера, если мы начнем создавать папки повторяя структуру сайта и писать их туда это скорее всего может привести к конфликту.

Цитата:
2. Написать в .htaccess условие с пере направлением подобных ссылок на свой файл обработчик, а в нем уже s_list_class подтягивать нужный контент
Это вариант для программистов. А конечному пользователю это увы недоступно.

А почему этот вариант для программистов? пишем в .htaccess условие, что все что заканчивается на .html мы обрабатываем нашим обработчиком. Единственное нужно учесть чтобы в наш обработчик не попадали неткэтовские страницы (mypage_ХХ.html).

В нашем обработчике переданный url помещаем в массив, структуру сайта смотрим в табличке Subdivision (http://mydomen.ru/razdel/razdel), mypage.html - mypage это должно быть ключевое слово компонента в разделе из таблички Sub_class, если все верно зная ид раздела и ид компонента в разделе s_list_class выводим контент, в противном случае отдаем заголовок 404 и контент соответствующей страницы
15.07.2010, 20:28
Ответить | Цитировать
den

Зарегистрирован:
2005-10-28
Сообщений: 32

А что мешает прикрепить обычный компонент со страницами вида site.ru/index/index_1.html, но ссылки формировать для него не $fullLink, а вручную, типа href='/".($f_Keyword?$f_Keyword:$current_cc['EnglishName'].'_'.$f_RowID.".html'? Полный вывод объекта в таком случае работает нормально. И вполне универсальный вариант дажеулыбка

Для 100% защиты от "/index/" можно добавить что-то типа этого в .htaccess, правда я не совсем понимаю, откуда возьмутся "неправильные" ссылки, чтобы по ним перейти…
Код:
RewriteEngine On

RewriteCond %{REQUEST_URI} ^/index.* [NC]
RewriteRule ^index/(.*)$ http://%{HTTP_HOST}/$1 [L,QSA]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l



 
15.07.2010, 21:05
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

А как у вас так получилось сделать?
У мен site.ru/index/index_1.html работает, а вот site.ru/index_1.html - уже 404.
16.07.2010, 00:25
Ответить | Цитировать
den

Зарегистрирован:
2005-10-28
Сообщений: 32

Мда, действительно, не думал, что от версии это зависит. Изначально тестировал на 3.1 — там работает, 3.5 — уже нет.

Попробовал добавить еще одно правило:
Код:
RewriteCond %{REQUEST_URI} ^/[a-z0-9_]*\.html$ [NC]
RewriteRule ^(.*)$ /netcat/require/e404.php?REQUEST_URI=index/$1 [L,QSA]

При нём, в данном случае, обработчику отправляется нужный url, полная копия того, что отправляется с немодифицированной страницы. Но, всё равно не работает. Следовательно, где-то в ядре вместо получаемой переменной $_GET['REQUEST_URI'] используются данные из адресной строки (что в общем-то неудивительно, в ядре встречаются такие вещи, что для однотипных операций используются совсем разные данные). Так что вариантов, кроме как с нарушением лицензионного соглашения, я не вижу грустный

PS: тем не менее, после того, как подобным образом на сайтах были заменены /?curPos=10 на pageXX.html, другие get-параметры на соответствующие html-страницы, убраны дубли с первой страницей списка объектов (curPos=0), выставлен принудительный 301-ый редирект с className_1.html на keyword.html и тому подобные seo-необходимые изменения — они стали намного лучше восприниматься поисковиками. Так что имеет смысл задуматься.

 
16.07.2010, 08:26
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

Да в том то и дело, что "?REQUEST_URI=" системой в наглую игнорируется :-)

А не могли бы вы написать манаульчик какие необходимо и как вы сделали СЕО изменения?
16.07.2010, 11:20
Ответить | Цитировать
den

Зарегистрирован:
2005-10-28
Сообщений: 32

Насчет мануальчика — это не так-то просто, я детально changelog не веду, замучался ужеулыбка В своё время хотел как-то универсально оформить, но потом понял, что такие нюансы мало кому интересны, да и с обновлением возникнут определенные проблемы. Проще под каждый конкретный сайт что-то быстро написать, с пониманием того, что этот сайт будешь поддерживать постоянно сам, чем оформлять универсальный модуль. Было бы подобное сообщество разработчиков — сделал бы, в одиночку смысла не вижу.

Сходу могу разве что предложить фикс, чтобы убрать дубли вида className_1.html и keyword.html. Использую в версиях 2.4-3.5, пример кидаю из 3.5, в других всё аналогично. Работает вот так.

/netcat/require/e404.php:
Код:
    // news_5.html - отображение объекта по компоненту и идентификатору
if ( preg_match("/^([a-z0-9-]+)_([0-9]+)$/i", $fname, $regs) && ($fname == $regs[1]."_".$regs[2]) ) {
if ( !empty($cc_in_sub) ) {
foreach ($cc_in_sub as $row) {
// find message with need params
if ( $result = ObjectExistsByID($row['Class_ID'], $row['sysTbl'], $regs[1], $regs[2], $nc_core->url->get_uri_date()) ) {
$cc_keyword = $regs[1];
$cc = $row['Sub_Class_ID'];
$sub = $nc_core->subdivision->get_current("Subdivision_ID");
$message = $result;
$action = "full";

# MY UPDATE
if ($regs[1] && $regs[2])
{
$CheckKeyword = mysql_query("SELECT Keyword FROM Message".$row['Class_ID']." WHERE Message_ID='$message' AND Keyword<>'' AND Keyword IS NOT NULL",$LinkID);
if (mysql_num_rows($CheckKeyword)) {
$KeyWord = mysql_result($CheckKeyword,0,0);
if ($KeyWord) {
$NewUrl = str_replace($regs[1].'_'.$regs[2],$KeyWord,$parsed_url['path']);
header('Status: 301 Moved Permanently');
header($_SERVER['SERVER_PROTOCOL'].' 301 Moved Permanently');
header("Location: $NewUrl".($parsed_url['query'] ? "?".$parsed_url['query'] : NULL));
exit();
}
}
}
# END UPDATE
break;
}
}
}
}

PS: можно на "ты"! улыбка

 
22.07.2010, 08:00
Ответить | Цитировать
Гость
Гость

Цитата:
Как создать страничку с адресом http://mydomen.ru/mypage.html ?

а зачем это надо? улыбка
А как создать страницу доступную для всех
http://mydomen.ru/netcat/admin/mypage.html
или на битриксе
http://mydomen.ru/bitrix/mypage.html
22.07.2010, 08:39
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

Уважаемый гость, вы не по теме.
Вопрос не в том "зачем", а "как".

зачем - может быть огромное количество причин.
Самая частая из них это - сайт создавался на другой CMS, определенные его страницы продвигались в поисковых системах.
Возникла необходимость перенести его на НетКэт, соответственно нужно сохранить все старые юрл на сайте, что бы не вылететь из индекса.
198 196 2010-07-23 18:00:40 10592
Страницы: 1  |  2
Описание проекта