Пишем каталог, а думаем файл

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем svetkin, 27 июл 2009.

Статус темы:
Закрыта.
  1. svetkin

    svetkin Постоялец

    Регистр.:
    12 мар 2009
    Сообщения:
    99
    Симпатии:
    15
    Добрый день!!!!!!!!

    Забрал на другой хостинг свой сайт от не очень обязательных людей...

    Но есть проблема... там все ссылки сделаны так www.site.ru/catalog, а фактически должно быть так www.site.ru/catalog.php, подскажите пожалуйста как заставить сервер думать что на самом деле ему надо искать файл, а не каталог??????
     
  2. svetkin

    svetkin Постоялец

    Регистр.:
    12 мар 2009
    Сообщения:
    99
    Симпатии:
    15
    нашел в корневом каталоге файл, называется mod_rewrite.php
    такого содержания:
    PHP:
    $URL strtolower ($_SERVER["REQUEST_URI"]);

    $V explode ("?"$URL);
    $Name substr ($V[0], 1999);

    if ( 
    $Name[strlen ($Name) - 1] == "/" )
      
    $Name substr ($Name0strlen ($Name) - 1);

    $ALLOWED = array (
    "about",
    "ch2",
    "catalog",
    "prod",
    "contacts",
    "price",
    "offer",
    "news",
    "archive",
    "sitemap",
    "search",
    "category",
    "map",
    "msg",
    "1",
    "gbebi",
    "error404",
    "nnpag1",
    "nnpag2",
    "nnpag3",
    "nnpag4",
    "nnpag5",
    "nnpag6",
    "nnpag7",
    "nnpag8",
    "nnpag9",
    "gibkie-shlangi",
    "vozdushno-teplovye-zavesy",
    "zavesy-frico",
    "nnpag10",
    "getnews");

    if ( 
    $Name == "" )
    {
      require_once 
    "index.php";
      exit;
    }

    if ( 
    $Name == "style.css" )
    {
      include_once 
    "style.css";
      exit;
    }
    if (
    $Name=="gbebi.php")
    {
        include_once 
    "gbebi.php";
      exit;
    }
    if ( ! 
    in_array ($Name$ALLOWED) )
    {
      require_once 
    "error404.php";
      exit;
    }

    require_once 
    "{$Name}.php";
    может это поможет решить проблему!!!!!!!

    Неужели придется в ручную переписывать все ссылки????
     
  3. svetkin

    svetkin Постоялец

    Регистр.:
    12 мар 2009
    Сообщения:
    99
    Симпатии:
    15
    Пытался бороться так:

    Код:
    RewriteEngine on 
    RewriteBase   / 
    RewriteRule ^(.*)\.*$  $1.php [R=permanent]
    но .php добавляется раз 100...

    Получается сл.: www.site.ru/catalog.php.php.php.php.php...
     
  4. aDolph

    aDolph Создатель

    Регистр.:
    20 апр 2009
    Сообщения:
    21
    Симпатии:
    6
    Видимо у тебя на старом хостинге у Апача мод_реврайт не был подключен и поэтому это было реализовано програмно. Спроси яндекса или гугль .htaccess и узнаешь много интересного про этот файлик.
    Только у тебя в движке нужно смотреть (тот кто програмил движку, если она самописная) настройки ЧПУ (человеко понятные урлы). По идее как у тебя сейчас, должно быть что-то "использовать встроенный мод_реврайт".
    Но сначала уточни, новый хостер тебе предоставляет с апачем мод_реврайт.
    Самый простой способ:
    1) Создаем файл "phpinfo.php"
    2) Пишем в него:
    <?php
    phpinfo();
    ?>

    По идее тебе можно и phpinfo(INFO_MODULES); что бы лишним внимание не отвлекать.
    3) Заливаешь его на свой хостинг и в браузере открываешь.
    Там будет похожее на это:
    apache2handler
    .....
    Loaded Modules - ... mod_rewrite ....
    Тогда смело настраивай .htaccess
     
  5. andrnag

    andrnag

    Регистр.:
    26 мар 2008
    Сообщения:
    350
    Симпатии:
    124
    svetkin, У тебя небольшая ошибка в коде. Должно быть так:
    Код:
    RewriteEngine on 
    RewriteBase   /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$  $1.php [R=301]
    
    Тогда правило будет работать только для несуществующих файлов.
    Это поможет, если в движке допустимо вызывать напрямую php файлы страниц.
    Судя по приведенному коду скрипта, это не совсем так. Плюс, в этом mod_rewrite.php производится некоторая защита от дурака и от 404 ошибки.

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

    Файлы .htaccess забирал со старого хостинга? Бывает, их иногда не видно из ftp-клиента. У тебя видно было скрытые файлы? (те что с точки начинаются)

    aDolph, совет полезный, но судя по тому, что .php дописывается много-много раз, mod_rewrite все-таки есть.
     
    svetkin нравится это.
  6. svetkin

    svetkin Постоялец

    Регистр.:
    12 мар 2009
    Сообщения:
    99
    Симпатии:
    15
    Дело в том, что они сами переносили, сайт с мускулом на мой хостинг, что перенесли тем и распологаю, могу сказать что папки с картинками и файлами для скачивания они не отдали, но это ладно... я их востановлю а сейчас пытаюсь заставить работать все ссылки...

    и благодаря andrnag, заработало!!!!!!!!

    Ребята, спасибо большое за отклик!!!!!!
     
  7. andrnag

    andrnag

    Регистр.:
    26 мар 2008
    Сообщения:
    350
    Симпатии:
    124
    Пожалуйста. :) Только этот код немного не безопасен, судя по тому, какие проверки были в mod_rewrite.php. Возможно, стоит явно прописать по правилу на каждое слово из массива $ALLOWED.
     
  8. svetkin

    svetkin Постоялец

    Регистр.:
    12 мар 2009
    Сообщения:
    99
    Симпатии:
    15
    а может, попробовать использовать mod_rewrite.php????

    откуда его можно вызывать???? или опять же в htaccess надо какое-то правило написать???
     
  9. andrnag

    andrnag

    Регистр.:
    26 мар 2008
    Сообщения:
    350
    Симпатии:
    124
    Тут уже не могу помочь — не хватает данных. Что за движок? (Скорее всего самописанный — нужно разбираться, как там все было)
     
  10. aDolph

    aDolph Создатель

    Регистр.:
    20 апр 2009
    Сообщения:
    21
    Симпатии:
    6
    В данном случае нужно было самому сделать резервную копию баз и по фтп забрать все папки от старого хостера. Для баз есть Sypex Dumper Lite, а для всего остального файла любой фтп клиент.
    To andrnag: Когда я писал свой ответ, в теме было только первых 2 сообщения. Но форум не хотел сохранять мой ответ, по причине того, что у меня было меньше 5 сообщений (и в пм тоже). Открыл еще одну вкладку и дальше по форуму лазил, пока не заработал 5 сообщение. После отправки своего увидел 3 сообщение. Но на работе не всегда есть время зависать на форумах. Ответ ушел и я свалил работать.
    To svetkin: andrnag верно говорит, нужно смотреть что за движка. На мой взгляд лучше былобы подправить и обойтить только .htaccess, но это моё IMHO.
     
Статус темы:
Закрыта.