Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проблема переноса сайта на том же хостинге


Автор: anjo 23.2.2011, 12:23
Ситуация такова, меня попросили решить одну проблему, но я не могу понять в чём дело.

Был осуществлён перенос сайта на том же хостинге, тоесть хостинг не менялся, сайт скопирован (PHP), MySql база вроде импортирована корректно. Перенос делал не я, а тот кто делал пропал с концами.

Проблема - при нажатии на ссылки меняется релативный адрес, но не происходит замены контента, хотя первая страница то загружается и коннект с базой происходит.

Может кто знает, где собака зарыта?

вот сам сайт http://scomfort.lv

Автор: Wolf1994 23.2.2011, 13:06
Посмотрите в сторону .htaccess. Если правила рерайта адресов были прописаны прямо в конфиге Apache, вполне вероятно, что они не были перенесены на новое место - поэтому ссылки не обрабатываются корректно.

Автор: anjo 23.2.2011, 20:57
вот собственно содержимое файла .htaccess


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php/$1 [L]
</IfModule>


К сожалению знания этого файла минимальны, но как ме кажется всё есть.
Или тут как то в ручную нужно прописывать каждый релативный линк?

И,к сожалению, всё, что было на предыдущем уже не посмотреть.

Автор: Wolf1994 24.2.2011, 07:24
Цитата(anjo @  23.2.2011,  20:57 Найти цитируемый пост)
RewriteRule (.*) /index.php/$1 [L]

Это правило обрабатывает слова в URL. Можно в index.php добавить print_r ($_GET), чтобы убедиться, что передача параметров работает, как надо - если так, значит дело не в параметрах, а в их обработчике.

Добавлено через 4 минуты и 10 секунд
Цитата(Wolf1994 @  24.2.2011,  07:24 Найти цитируемый пост)
print_r ($_GET)

...или print_r ($_SERVER) - точно не знаю.

Автор: anjo 25.2.2011, 00:19
Да, print_r ($_GET); показал, что проблема в обработчике.
Выдаёт: Array ( [0] => main)

Вот код php, из index.php

Код

    #ob_start();
    $is_frontend = true;
    require('startup.php');
    require('./lib/frontend.php');
    
    echo $_SERVER["PATH_INFO"];

    if(!isset($_SESSION['lang']))
        $_SESSION['lang'] = 'ru';

    parse_path_info();
    


    //pre-processing
    if(isset($_GET[0]))
    {
        switch($_GET[0])
        {
            case 'lang':
                $_SESSION['lang'] = mysql_real_escape_string($_GET[1]);
                unset($_GET[0]);
                unset($_GET[1]);
                header('Location: '.$base.implode( '/', array_values($_GET) ));
                die();
                break;
            case 'contacts':
                if(isset($_GET[1]))
                {
                    switch($_GET[1])
                    {
                        case 'form':
                            if(isset($_POST['name']))
                            {
                                mail('[email protected]', 'SmartComfort message',
    "Name: $_POST[name]\n
    Email: $_POST[email]\n
    Phone: $_POST[phone]\n
    \n
    $_POST[message]",
                                "From: admin <[email protected]>\r\n" .
                                "MIME-Version: 1.0\r\n" .
                                "Content-type: text/plain; charset=utf-8");
                            }
                            break;
                    }
                }
                break;
        }
    }

    if(!isset($_GET[0]))
    {
        $_GET[0] = 'main';

    }



похоже был дописан этот кусок
    if(!isset($_GET[0]))
    {
        $_GET[0] = 'main';

    }


, если менять 'main', на другие, то контент меняется, $_GET[1] за $_GET[0] выдаёт подкаталог.

Похоже придётся все прописать вручную, не подскажете как? что то с switch-case у меня не получается, видимо опыта маловато.

Автор: Wolf1994 25.2.2011, 07:49
У Вас в .htaccess правило немного изменено. Оно передаёт не в $_GET, а в $_SERVER. Посмотрите $_SERVER ['REQUEST_URI'], кажется. Попробуйте присвоить его значение в $_GET [0].

Добавлено через 2 минуты и 1 секунду
Если значений несколько, разбейте их: $_GET=explode ("/", trim ($_SERVER ['REQUEST_URI'], '/'));

Автор: anjo 25.2.2011, 19:26
Огромное спасибо.
$_GET=explode ("/", trim ($_SERVER ['REQUEST_URI'], '/'));
практически решил задачу.

+1, как только наберу 100 постов smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)