|
|
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 то же не просто так все там нагрузка на сервер идет
|