Помогите разобраться с ЧПУ

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем allsu, 4 май 2008.

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

    allsu Постоялец

    Регистр.:
    29 дек 2007
    Сообщения:
    135
    Симпатии:
    5
    Перепробовал разные способы с изменениями кода в .htaccess
    в итоге ничего не получается:(

    наверно надо корректировать код скрипта

    вот сайт http://onaniruem.freehostia.com/

    ссылки там вида /index.php?n=38
    а хотелось бы /index38.php
    или key.php

    можно ли в данном скрипте

    PHP:
    <?php

    //Для работы со скриптом вам нужно в файл links.txt
    //скопировать ваши ключевики в столбик(пример прилагается).
    //В файл text.txt вставить текст, который будет использоваться 
    //для генерации уникального текста содержания сайта.
    //Далее вы можете изменить шаблон сайта. 
    //Инструкция по изменению шаблона расположена ниже.
    //После того, как все файлы заполнены и изменен шабло
    //скидывайте всю папку в корень вашего сайта. 
    //Имейте ввиду, что ваш хостинг должен поддерживать PHP.
    //Если возникнут какие-нибудь вопросы обращайтесь:
    //
    //
    //
    //
    //Enjoy! ;)




    //Настройки здесь 

    $NumHrefLinks 25// Минимальное Количество выводимых ссылок в навигации

    //Данные скрипт похволяет опеределять кто зашел на сайт:
    //поисковик или обычный посетитель. Это позволяет не выдавать
    //роботам поисковика скрипт редиректа. Т.е. Есть гарантия того,
    //что вас не забанят за использование скрипта редиректа ;)
    //Это ссылка - куда редиректить:
    //$HumansGoToURL = 'http://clickcashmoney.com';

    $HumansGoToURL ''//А это, если редиректить некуда ненадо

    //Далее идут настройки, которые лудше не менять.

    $source_text 'text.txt'//Это файл с текстом для генерации контента.

    //Массив $RobotsAgentsID содержит ключевые слова,
    //по которым будет узнаваться робот поисковика

    $RobotsAgentsID = array('yandex','google','rambler','aport','altavista'
      
    'yahoo''scan''robot''wisenutbot''looksmart');

    //Массив $RobotsDomainsWords содержит часть имени домена, 
    // которого приходят посетители. Нам интересны только поисковики.

    $RobotsDomainsWords = array('yandex.ru''google''rambler''aport',
      
    'altavista''yahoo''alltheweb.com''lycos''amazon.com'
      
    'mediaplex.com''download.com''domaindirect.com''pricegrabber.com'
      
    'opera.com''infoseek');

    //Дальше идут скрипты, ничего не меняйте, если не знаете ;)

    //Здесь реализован алгорить Маркова, для генерации уникального текста.
    $dictionary = array(); 

    function 
    load()
    {
        global 
    $dictionary,$source_text;
        
    //Читаем исходный файл
        
    $str file_get_contents($source_text);
        
    //Превращаем текст в одну строку
        
    $str preg_replace("#[\r\n]#","",$str);
        
    //Выделяем все слова из строки (выражение в кавычках или в скобках считается одним словом)
        
    preg_match_all("#((\"[^\"]+\")|(\([^\)]+\))|([^\(\)\"'\s]+))(\s+|\z)#",$str,$parts);
        
    $words $parts[1];
        
    $count count($words);

        
    //Заполняем словарь
        
    for( $i 0$i $count$i++ )
        {
            if( 
    $i )
            {
                if( !
    in_array($words[$i],$dictionary[$prev_word]) )
                    
    $dictionary[$prev_word][] = $words[$i];
            }
            
    $prev_word $words[$i];
            if( empty(
    $dictionary[$prev_word]) )
                
    $dictionary[$prev_word] = array();
        }
    }




    error_reporting  (E_ERROR E_WARNING E_PARSE);

    //Скрипт "узнавания" робота

    if(!empty($HumansGoToURL) && is_array($RobotsAgentsID) && count($RobotsAgentsID)>0) {
      
    $isRobotAgent 0;
      
    $agent strtolower((isset($_SERVER['HTTP_USER_AGENT']) ) ? $_SERVER['HTTP_USER_AGENT'] : $HTTP_USER_AGENT);
      if(
    strpos($agent'bot')!=false$isRobotAgent=1;
      for(
    $i=0; !empty($agent) && !$isRobotAgent && $i<count($RobotsAgentsID); $i++) {
        if(
    strpos($agentstrtolower($RobotsAgentsID[$i]))!=false$isRobotAgent=1;
      }  
      if(!
    $isRobotAgent) {
        
    $ref strtolower((isset($_SERVER['HTTP_REFERER']))? $_SERVER['HTTP_REFERER'] : $HTTP_REFERER);
        if(
    preg_match("/^(https?\:\/\/)?([a-zA-Z0-9\-\_\.]+).*$/"$ref$match) && 
          !empty(
    $match[2])) {
          
    $ref $match[2];
        }
        for(
    $i=0; !empty($ref) && $i<count($RobotsDomainsWords); $i++) {
          if(
    strpos($refstrtolower($RobotsDomainsWords[$i]))!=false) {
            
    header("Location: $HumansGoToURL");
            exit;
          }
        }
      }
    }




    $links = array();

    $handle fopen("links.txt""r");
    while(!
    feof($handle)) { 
      
    $str fgets($handle);
      
    $str=trim($str);
      if(empty(
    $str)) continue;
      
    $links[] = $str;
    }
    fclose($handle);
    $num=$_REQUEST['n'];
    if(empty(
    $_REQUEST['n'])) $num 1;

    $HTML_title $links[$num];

    $PagesCountApprox=count($list);




    srand((float) microtime() * 10000000);

    $output '<ul>';
    $output2 '<p>';
    for(
    $i=0$i<$NumHrefLinks$i++) {
    $num=array_rand($links);
    $script $_SERVER[SCRIPT_NAME] . "?n=";

      
    $output .= "<li><a href=\"".($script ).$num."\" title=\"".$links[$num]."\">"$links[$num]."</a>\n";
      
    $output2 .= "\n" $links[array_rand($links)] .", \n";
    }
    $output .= '</ul>';
    $output2 .= '</p>';



    function 
    genText($count,$key)
    {
        global 
    $dictionary;
        
    $words array_keys($dictionary);
        
    $word $words[0];
        
        
    $text ='';
        for( 
    $i 0$i $count$i++ )
        {    
            
            if (
    $i%50==0
            {
                
    $text .= ' <em>'.$key.'</em>'/// а вот оно выделение кивордов, мона какой нрапвится тег поставить
                             

                            else 
                           {
                
    $text .= ' '.$word;
            }
            if (
    $i%150==0
            {
                
    $imgname='graph/'.rand(1,5).'.jpg';
                
    $text .= '<img src='.$imgname.' alt="'.$key.'" style="float: right;">';
                             } 


            
    //Следующее слово - случайное слово из тех, что идут в исходном тексте за текущим словом
            
    $word $dictionary[$word][rand(0,count($dictionary[$word])-1)];
        }
        return 
    $text;
    }





    $JavaScriptCode $OnLoadJavaScriptCode $CopyrightRef '';
    if(!empty(
    $HumansGoToURL)) {
      
    $CopyrightRef .=<<<EOT
    <p align="center">$HTML_title</p>
    EOT;
      
    $JavaScriptCode .=<<<EOT
    eval('w'+'in'+'dow.'+'lo'+'cat'+'ion'+'='+'\''+'$HumansGoToURL'+'\'');
    EOT;
      
    $OnLoadJavaScriptCode .=<<<EOT
    onLoad="$JavaScriptCode"
    EOT;


    }

    load();
    $content=genText(550,$HTML_title);

    //---------------------ШАБЛОН------------------------
    //Небольшая инструкция по использованию шаблона сайт.
    //
    //Шаблон выполнен в виде
    //обычного html кода, но со специальными вставками, 
    //которые необхожимо вписывать в нужные места.
    //Описание вставок:
    //$HTML_title - это строка с ключевиком, вставляем ее в:
    //1) Метатег description
    //2) Метатег keywords
    //3) Тег <title>$HTML_title</title>
    //4) В место сайта, где начинается содержание в тег <h1>$HTML_title</h1>
    //5) И внизу страници, где пишете свой copiright
    //$OnLoadJavaScriptCode - Это скрипт редиректа, его нужно вписать в тег <body>
    //вот так <body $OnLoadJavaScriptCode>
    //$output - это навигация, вставляйте туда, где увас в шаблоне находится меню
    //$output2 - это ключевики из навигации, которые нужно вставить в тот же столбик, что и меню.
    //$content - Сожержание сайта. Вставляйте после тега <h1>$HTML_title</h1>.
    //
    //Пример шаблона прилагается, если разбираетесь в html, то сделаете все без проблем,
    //Или же нужно просто немного смекалки ;)



    $goodout = <<<EOF

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Pragma" content="no-cache">
    <meta name="revisit" content="3 days">
    <meta name="robots" content="index,all">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="no-cache">
    <meta http-equiv="Expires" content="-1">
    <meta name="Resource-Type" content="document">
    <meta name="Content-Language" Content="ru">
    <meta http-equiv="robots" content="index,follow">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="no-cache">
    <meta http-equiv="Expires" content="-1">
    <meta name="description" Content="
    $HTML_title">
    <meta name="keywords" Content="
    $HTML_title">
    <meta http-equiv="Content-Language" content="ru">
    <meta name="Language" Content="russian">
    <meta name="Subject" Content="
    $HTML_title">
    <meta name="Rating" Content="general">


    <title>
    $HTML_title</title>
    <style type="text/css">
    <!--
    .textbox {font-family: Arial, Helvetica, sans-serif;
        font-size: 10px;
        background-color: #F7F7F7;
        border: 1px solid #999999;
    }
    .style1 {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 9px;
    }
    -->
    </style>
    </head>
    <body 
    $OnLoadJavaScriptCode>

    <H1>
    $HTML_title</H1>
    <table width="100%" border="1">
      <tr>
        <td height="187" valign="top"><h2>Навигация:</h2>
    $output</td>
        <td width="80%" rowspan="2" valign="top">
    $content</td>
      </tr>
      <tr>
        <td width="20%" height="187" valign="top"><h2>Содержание:</h2>
    $output2</td>
      </tr>
    </table>
    <center><p><b><i>
    $HTML_title </i></b>&copy; 2008 </p></center>
    </body>
    </html>

    EOF;

    echo 
    $goodout;
    ?>

    такое организовать?:bc:
     
  2. z3rg

    z3rg

    Регистр.:
    2 фев 2007
    Сообщения:
    731
    Симпатии:
    336
    в .htaccess

    RewriteEngine on
    RewriteRule /(\d+)/? index.php?n=$1 [L]


    при запросе URL вида site.ru/500/ должен обратиться к site.ru/index.php?n=500


    ничего сложного тут нету
     
  3. inovision

    inovision Создатель

    Регистр.:
    28 июл 2007
    Сообщения:
    14
    Симпатии:
    3
    в htaccess надо сделать это:
    (если работает на хостинге .htaccess и mod_rewire, а если не работает, то сделать не получится)

    После того, как сделаешь htaccess попробуй зайти на какую-либо страницу, набрав в браузере вручную index38.php. Если зайдет, то можно приступать к исправлению пхп-кода

    И эту строчку
    заменить на

     
  4. allsu

    allsu Постоялец

    Регистр.:
    29 дек 2007
    Сообщения:
    135
    Симпатии:
    5
    пробовал уже такое не помогло:(

    Добавлено через 5 минут
    попробовал и Ваш способ не помогло:(
    видимо действительно не так всё просто:bc:
     
  5. inovision

    inovision Создатель

    Регистр.:
    28 июл 2007
    Сообщения:
    14
    Симпатии:
    3
    ошибка 500 ?
    Рассказывай что как, на каком шаге не получилось...
    Так мы тебе поможем быстрее!


    Попробуй в .htaccess написать только это.

    После этого попробуй зайти на
    _ttp://onaniruem.freehostia.com/index38.php
     
    allsu нравится это.
  6. allsu

    allsu Постоялец

    Регистр.:
    29 дек 2007
    Сообщения:
    135
    Симпатии:
    5
    Похоже я где то накосячил:ah:
    В итоге погрешил на фри хост попробовал залить на другой фри хост всё ок заработало!
    Залил то же самое на данный фрихост и тож всё ок работает!!!
    СПАСИБО ВАМ ОГРОМНОЕ!!:ay:
     
  7. allsu

    allsu Постоялец

    Регистр.:
    29 дек 2007
    Сообщения:
    135
    Симпатии:
    5
    inovision
    если будет время подскажи как в дугом скрипте организовать аналогичное с ЧПУ
    в .htaccess
    залил
    HTML:
    RewriteEngine On
    RewriteBase /
    RewriteRule ^pages([0-9]+).php$ /?pages=$1 [L]
    (немного модифицировав)

    захожу на
    _ttp://onaniruem.freehostia.com/pages22.php всё ок раотает

    а вот что и где в коде index.php менять не пойму
    чтоб ссылки норм отображались на странице

    вот кусок кода:
    PHP:
    //---------------------------------------------------------------------------------------------------------------------------
    $CUR_KEY_ARR=file('keyword.txt');
    $count=count($CUR_KEY_ARR)-1;
    $pages=$_GET['pages']; if ($pages=='')  {$pages=1;}
    //---------------------------------------------------------------------------------------------------------------------------

    if ($pages!=0)

    {

    //---------------------------------------------------------------------------------------------------------------------------
    $CUR_KEY_ARR_pages=trim($CUR_KEY_ARR[$pages]);
    srand((double)microtime()*1000000);
    $RNID=rand(1100);
    if (
    $RNID>10)
    {
    //...........................................................................................................................

    //---------------------------------------------------------------------------------------------------------------------------
    $SITE_MAP_HTML='<a href="/?pages=0">меню</a>';
    //---------------------------------------------------------------------------------------------------------------------------

    //---------------------------------------------------------------------------------------------------------------------------
    $KEY_CUR=trim($CUR_KEY_ARR[$pages]);
    for (
    $r=1$r<=300$r++)
    {
    $KEY_RND[$r]=$CUR_KEY_ARR[rand(0$count)];
    $RND_WLE=rand(0$count);
    $KEY_LNK[$r]='<a href="/?pages='.$RND_WLE.'">'.$CUR_KEY_ARR[$RND_WLE].'</a>';
    }
    //---------------------------------------------------------------------------------------------------------------------------
     
  8. inovision

    inovision Создатель

    Регистр.:
    28 июл 2007
    Сообщения:
    14
    Симпатии:
    3
    Достаточно лишь сделать, чтобы ссылки теперь генерились по новому типу. Исправленный php код ниже

    PHP:
    //---------------------------------------------------------------------------------------------------------------------------
    $CUR_KEY_ARR=file('keyword.txt');
    $count=count($CUR_KEY_ARR)-1;
    $pages=$_GET['pages']; if ($pages=='')  {$pages=1;}
    //---------------------------------------------------------------------------------------------------------------------------

    if ($pages!=0)

    {

    //---------------------------------------------------------------------------------------------------------------------------
    $CUR_KEY_ARR_pages=trim($CUR_KEY_ARR[$pages]);
    srand((double)microtime()*1000000);
    $RNID=rand(1100);
    if (
    $RNID>10)
    {
    //...........................................................................................................................

    //---------------------------------------------------------------------------------------------------------------------------
    $SITE_MAP_HTML='<a href="/pages0.php">меню</a>';
    //---------------------------------------------------------------------------------------------------------------------------

    //---------------------------------------------------------------------------------------------------------------------------
    $KEY_CUR=trim($CUR_KEY_ARR[$pages]);
    for (
    $r=1$r<=300$r++)
    {
    $KEY_RND[$r]=$CUR_KEY_ARR[rand(0$count)];
    $RND_WLE=rand(0$count);
    $KEY_LNK[$r]='<a href="/pages'.$RND_WLE.'.php">'.$CUR_KEY_ARR[$RND_WLE].'</a>';
    }
    //---------------------------------------------------------------------------------------------------------------------------  
     
    allsu нравится это.
  9. allsu

    allsu Постоялец

    Регистр.:
    29 дек 2007
    Сообщения:
    135
    Симпатии:
    5
    огромное спасибо всё так как я и хотел.:ay:
     
  10. nikola0077

    nikola0077 Постоялец

    Регистр.:
    13 мар 2007
    Сообщения:
    162
    Симпатии:
    5
    А можно немного для тупых..
    Php обязательно надо править? Т.е. нельзя в .htaccess сделать редирект на новый тип URLа ?

    И что означает [L] ?
     
Статус темы:
Закрыта.