Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Как сохранить старые ссылки .htm при переносе сайт на netcat

14.04.2010, 23:06
Spike84

Зарегистрирован:
2010-01-25
Сообщений: 8

Если кто разбирается с mod-rewrite в netcat, помогите плиз. Проблемка такая:

Чтобы сохранить старые ссылки у сайта нужно для старых путей /index/*/ прописать новые значения /*.htm (* - любые символы).
Пробую сделать это с помощью mod_rewrite:

Код:
RewriteRule ^/(.*).htm$ /index/$1/ [L]


Все это дело вставляю в блок .htaccess (в корне)
Код:
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/(.*).htm$ /index/$1/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# Если NetCat стоит в подпапке, например mysite, то
# RewriteRule ^(.+)$ /mysite/netcat/require/e404.php?REQUEST_URI=$1 [L,QSA]
# в противном случае

RewriteRule ^(.+)$ /netcat/require/e404.php?REQUEST_URI=$1 [L,QSA]
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
</ifModule>


В результате правило не работает. При заходе на /*.htm выводится "Страница не найдена".

Очень очень нужно срочно! Если кто знает как, готов понести небольшие финансовые затраты улыбка Пишите в аську 3семьсемь039269
15.04.2010, 08:31
malich
Андрей Малков

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

Проблема в том, что так
Код:
RewriteRule ^/(.*).htm$ /index/$1/ [L]

сделать нельзя

Данные ($1) можно только отправлять на файл php(обработчик), к примеру
Код:
RewriteRule ^/(.*).htm$ my-file.php?url=$1 [L]


а в этом файле уже производить разбор данных из $url и выводить нужный контент
18.04.2010, 01:43
Spike84

Зарегистрирован:
2010-01-25
Сообщений: 8

Огромнейшее спасибо пользователю malich за помощь!

Итак проблема была в том что при переносе сайта необходимо было сохранить старые ссылки, которые были в корне старого сайта в виде *****.htm Сохранить надо было, так как по ним велось продвижение старого сайта.

Решил проблему так:

1) создал нужные текстовые странички? чтобы при клике на соответсвующие ссылки вызывались странички физически созданные на сайте (компонент Базовые: Простая страница)

2) создал кучу нужных файликов в корне сайта такого содержания:
Код:

$razdell = "171";
$modull = "201";
include ('razno/top.php');

$razdell - id странички в сайте
$modull - id используемого компонента

3) Чтобы сервер читал php в .htm файлах прописываем в .htaccess (говорят при большой посещаемости может тормозить сайт)
Код:

RemoveHandler .htm
AddType application/x-httpd-php .php .htm


4) В папке /razno/ создаем файлик top.php в котором пишем
Код:

<?php
if (!isset($SETTINGS_LOADED)) require $_SERVER['DOCUMENT_ROOT']."/vars.inc.php";
$passed_thru_404=1;
require ($_SERVER['DOCUMENT_ROOT']."/netcat/require/index.php");
eval("echo "$template_header";");
echo s_list_class($razdid, $modid, "");
eval("echo "$template_footer";");
?>


require $_SERVER['DOCUMENT_ROOT']."/vars.inc.php"; - вызываем файлик с конфигурационными переменными netcat
$passed_thru_404=1; - отменяем вывод странички админки
eval("echo "$template_header";"); - выводим шапку сайта
eval("echo "$template_footer";"); - выводим футер сайта
echo s_list_class($razdell, $modull, ""); - выводим контент определенного раздела ($razdell, $modull - номера указываемые в каждом файлике .htm отдельно)

5) Если есть необходимость, можно в действие вставить php код, который будет после добавления, изменения и удаления будет генерировать, редактировать и удалять нужные .htm странички

6) Единственный минус сейчас, над которым буду биться - на страничках отображаются Title, Description, Keywords с родительского раздела
18.04.2010, 02:04
Spike84

Зарегистрирован:
2010-01-25
Сообщений: 8

malich также подсказал второй вариант решения без создания кучи файликов, с созданием одного .php файла со скриптом:

второй путь это мод реврайт, суть его таже самая.
в штакесе пишем
RewriteRule ^/(.*).htm$ my-file.php?url=$1 [L]

создаем файлик my-file.php

в нем пишем примерно следующие:
<?
$passed_thru_404=1;
if (!isset($SETTINGS_LOADED)) require "../../../vars.inc.php";
require $INCLUDE_FOLDER."index.php";

//разбираем url
if ($_GET[url])
{
//если у нас есть url разбираем его
//убираем из url первый и последний / чтобы не формировался лишний пустой элемент массива
$pattern = "//$/";
$replacement = "";
$myurl = preg_replace($pattern, $replacement, $_GET[url]);
$pattern = "/^//";
$myurl = preg_replace($pattern, $replacement, $myurl);

//помещаем url в массив
$myurl = explode("/", $myurl);

}

$template=81;
$action = "index";
$passed_thru_404=1;
require $INCLUDE_FOLDER."index.php";
eval("echo "$template_header";");

echo s_list_class("","");

eval("echo "$template_footer";");
}

Еще раз спасибо пользователю malich
25.06.2013, 09:54
Jok
Jok

Зарегистрирован:
2007-11-26
Сообщений: 1

на 5,1 ни один из примеров не работает

Jok
08.07.2013, 12:45
Гость
Гость

проще в самом движке подправить правда после обновления слетит, там в 1 файле все формируется и жестко все прописано
mode rewrite то же не просто так все там нагрузка на сервер идет
198 196 2013-07-08 12:45:01 9924
Описание проекта