Автор Тема: Роспотребнадзор попросил сделать  (Прочитано 8985 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DET

  • Местный лис
  • ***
  • Сообщений: 170
  • Авторитет: 4
  • Пол: Мужской
  • DET
    • Просмотр профиля
Роспотребнадзор попросил сделать
« : 13 сентября 2018, 17:02:57 »
Всем добрый . Вот и столкнулся с проблемой.
По новым требованиям РОСПОТРЕБНАДЗОРа - все сайты гос учреждения должны иметь одинаковую структуру.  -Долго писать не буду : для примера

www.site.ru/sveden/info.html/
www.site.ru//sveden/document/ и т.д.

Пришло письмо от РОСПОТРЕБНАДЗОРа на школьный сайт. Исправить в ближ.время

Как так сделать?

Оффлайн Oslix

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2 473
  • Авторитет: 346
  • Пол: Мужской
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #1 : 14 сентября 2018, 11:27:13 »
Вот жеш не сидится им :(

Оффлайн DET

  • Местный лис
  • ***
  • Сообщений: 170
  • Авторитет: 4
  • Пол: Мужской
  • DET
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #2 : 15 сентября 2018, 12:40:34 »
Я вот подумал - а можно прописать ( сделать) уникальный ID  так  sveden/document


Оффлайн Oslix

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2 473
  • Авторитет: 346
  • Пол: Мужской
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #3 : 17 сентября 2018, 14:13:40 »
Может быть можно сделать как sveden-document.html, а модреврайтом менять все "-" на "/" ?

Оффлайн DET

  • Местный лис
  • ***
  • Сообщений: 170
  • Авторитет: 4
  • Пол: Мужской
  • DET
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #4 : 18 сентября 2018, 08:43:14 »
Подскажите как это сделать?

Оффлайн Oslix

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2 473
  • Авторитет: 346
  • Пол: Мужской
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #5 : 18 сентября 2018, 12:44:49 »
Увы. Мои знания в мод_реврайте нулевые. Но у нас по сути же ЧПУ так реализован. Надо посмотреть как там сделано

Оффлайн DET

  • Местный лис
  • ***
  • Сообщений: 170
  • Авторитет: 4
  • Пол: Мужской
  • DET
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #6 : 20 сентября 2018, 08:20:13 »
Буду ждать кто поможет мне в этой сложной ситуации. Прошу помогите.
« Последнее редактирование: 20 сентября 2018, 09:15:16 от DET »

Оффлайн Acho

  • Администратор
  • Новичок
  • *****
  • Сообщений: 4
  • Авторитет: 0
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #7 : 20 сентября 2018, 14:39:29 »
К сожалению, адекватного решения нам найти не удалось. Пока никто не сообразил хороший модуль ЧПУ, мы придумали временное решение.
можно добавить фикс в точку входа index.php (в самое начало файла):
/**
* Fix by RPN (fix link)
*/
$_serverUri = trim($_SERVER["REQUEST_URI"],"/");
$_expServerUri = explode("?",$_serverUri);

function str_replace_once($search, $replace, $text)
{
   $pos = strpos($text, $search);
   return $pos!==false ? substr_replace($text, $replace, $pos, strlen($search)) : $text;
}

if (strpos($_expServerUri[0],".html") !== false) {
$_expServerUri[0] = str_replace("-","/",$_expServerUri[0]);
$_expServerUri[0] = str_replace(".html","",$_expServerUri[0]);
if (count($_expServerUri) == 1) {
$_redirUri = "/" . $_expServerUri[0];
}
else {
$_redirUri = "/" . implode("?",$_expServerUri);
}

header("HTTP/1.1 301 Moved Permanently");
header("Location: " . $_redirUri);
exit();
}

$_expServerUri[0] = str_replace("/","-",$_expServerUri[0]);
if (strpos($_expServerUri[0],"?") !== false) {
$_expServerUri[0] = str_replace_once("?",".html?",$_expServerUri[0]);
$_serverUri = "/".implode("?",$_expServerUri);
}
else {
$_expServerUri[0] .= ".html";
$_serverUri = "/".implode("?",$_expServerUri);
}
$_SERVER["REQUEST_URI"] = $_serverUri;

Сделать тоже самое на уровне апача у нас не получилось.

И с этим решением файл .htaccess в базовом варианте должен выглядеть так:
RewriteBase /
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule   ^.*$ index.php

AddDefaultCharset UTF-8
AddType text/x-component .htc

В итоге всё работает ровно до того момента, пока не появляются многоуровневые url. Может у вас это не повторится, но на моём тестовом движке ссылки генерируются относительно страницы, а не корня сайта. Т.е. на странице site.ru/level1/level2 ссылки на каталог будут следующими: site.ru/level1/level2/catalog?cid=1. Фиксится изменением относительности от страницы относительностью от корня (вместо ссылки catalog.html?cid=1 писать /catalog.html?cid=1).

Многоуровневые урлы делаются просто: в id страницы указываем, например, catalog-filter-apple, в старом варианте страница бы выглядела как site.ru/catalog-filter-apple.html, с этим фиксом будет site.ru/catalog/filter/apple.

Ну и как рудимент ссылки на странице генерируемые остаются старого образца, но при переходе по ним будет происходить 301-редирект.
« Последнее редактирование: 20 сентября 2018, 14:51:43 от Acho »

Оффлайн Nikodim

  • Опытный лис
  • ****
  • Сообщений: 313
  • Авторитет: 38
  • Пол: Мужской
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #8 : 20 сентября 2018, 14:49:26 »
сам редирект c "-" на "/" в htaccess будет такой
RewriteRule ^(.+)(\s|-)(.+)$ /$1/$3 [R=301,L]
но как это будет работать, особенно при включенным ЧПУ, не известно

Оффлайн Acho

  • Администратор
  • Новичок
  • *****
  • Сообщений: 4
  • Авторитет: 0
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #9 : 20 сентября 2018, 19:12:33 »
Более нормальная реализация:
в самое начало index.php
$_serverUri = parse_url($_SERVER["REQUEST_URI"],PHP_URL_PATH);
$_serverQuery = parse_url($_SERVER["REQUEST_URI"],PHP_URL_QUERY);

if (strpos($_serverUri, ".html") !== false) {
  $_redirUri = str_replace("-", "/", rtrim($_serverUri, ".html"));
  $_redirUri .= !$_serverQuery ?: "?" . $_serverQuery;
  header("HTTP/1.1 301 Moved Permanently");
  header("Location: " . $_redirUri );
  exit();
}

$_serverUri = "/" . str_replace("/", "-", ltrim($_serverUri, "/"));
$_serverUri .= ".html?" . $_serverQuery;

$_SERVER["REQUEST_URI"] = $_serverUri;

Чтобы пофиксить все ссылки по сайту, я сделал фикс во фронтконтроллере:
include/frontoffice_manager.class.php
в методе Start() последняя строка
$kernel->priv_output($html, false, true);Перед ней добавить:
$_dom = new DOMDocument;
$_dom->loadHTML($html);
$_escSymbol = ["mailto:","javascript:"];

foreach ($_dom->getElementsByTagName('a') as $_node) {
if ($_node->hasAttribute( 'href' )) {
$_a = $_node->getAttribute( 'href' );
$_aUri = parse_url($_a,PHP_URL_PATH);
$_aQuery = parse_url($_a,PHP_URL_QUERY);

if (strpos($_a, "mailto:") || strpos($_a, "javascript:") || $_aUri == "/") continue;

if (strpos($_aUri, ".html") !== false) {
$_aUri = str_replace("-", "/", rtrim($_aUri, ".html"));
$_aUri .= !$_aQuery ? false : "?" . $_aQuery;
if (mb_substr($_aUri,0,1) != "/") $_aUri = "/" . $_aUri;
$html = str_replace($_a,$_aUri,$html);
}
}
}

Вроде бы так работает нормально.
« Последнее редактирование: 20 сентября 2018, 19:16:38 от Acho »

Оффлайн DET

  • Местный лис
  • ***
  • Сообщений: 170
  • Авторитет: 4
  • Пол: Мужской
  • DET
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #10 : 21 сентября 2018, 07:40:34 »
Спасибо что помогаете .. Я не понимаю где менять в каком файле. можно попросить сбросить фаил index.php и куда мне его вставить .. Спасибо .

Оффлайн Acho

  • Администратор
  • Новичок
  • *****
  • Сообщений: 4
  • Авторитет: 0
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #11 : 21 сентября 2018, 11:52:54 »
В корне сайта есть файл index.php. Сразу после <?php надо вставить код. Потом зайти в папку include, там будет второй файл frontoffice_manager.class.php. там найти строчку $kernel->priv_output($html, false, true); и вставить нужный кусок перед этой строчкой.

Оффлайн DET

  • Местный лис
  • ***
  • Сообщений: 170
  • Авторитет: 4
  • Пол: Мужской
  • DET
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #12 : 24 сентября 2018, 15:51:01 »
Что то не выходит у меня (Аленький цветочек).
Все делаю как в инструкции . Но после того как все заменил - сайт не открывается.
 
« Последнее редактирование: 24 сентября 2018, 15:52:45 от DET »

Оффлайн Acho

  • Администратор
  • Новичок
  • *****
  • Сообщений: 4
  • Авторитет: 0
    • Просмотр профиля
Re: Роспотребнадзор попросил сделать
« Ответ #13 : 27 сентября 2018, 12:11:02 »
Есть какие-нибудь ошибки?
Надо смотреть, так подсказать сложно. Может у вас какие-то кастомные доделки ядра есть, может ещё что. На тестовом стенде всё прокатило, надо смотреть конкретно вашу реализацию