За последние 24 часа нас посетил 62581 программист и 1677 роботов. Сейчас ищут 1036 программистов ...

Проблема с mod_rewrite

Тема в разделе "PHP для новичков", создана пользователем darkgod, 3 окт 2008.

  1. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    У меня проблема с mod_rewrite и не понятно как ее решать...

    Вообщем вот мое содержимое файла .htaccess

    Код (Text):
    1. RewriteEngine On
    2.  
    3. RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ modules/news.php?action=$1&id=$2 [L]
    Новости открываются и так http://site/modules/news.php?action=news&id=158 и так http://site/news/158/

    Вроде-бы все работает, но почему - то ссылки не меняются автоматически а всегда работают без mod_rewrite
     
  2. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Тебе самому надо ссылки менять.
     
  3. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Ну так сслыки на новости же прописаны в коде, мне их нужно сразу приводить к такому виду? Я думал что они должны автоматом перебиваться и если отключишь модреврайт то будут работать без него...
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    нет, не будут. Реврайт переделывает из
    в
    и передаёт скрипту. Не наоборот
     
  5. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    HTML сам по себе не изменится.
    mod_rewrite делает только перенаправление.
     
  6. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Эт значит мне все ссылки нужно заранее писать в виде реврайта???
     
  7. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Угу. А ещё лучше было бы, если б ты думал немного на перёд и написал скрипт, который будет отображать ссылки по заданному паттерну.
     
  8. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Поподробнее можно об этом??? я просто с мод реврайт работать вообще не умею н попросили сделать
     
  9. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Приведу пример из движка компании, в которой я работаю:

    <a href="<?= GetPageWebPath('', 'actions_bonuses_match'); ?>

    PHP:
    1.  
    2. <?php
    3. function GetPageWebPath($page = '', $ext = '', $userParams = '', $setLang = '')
    4. {
    5.     global $SYS_VARS, $SESS; // $_SERVER, $_GET,
    6.  
    7.     if ($page == '')
    8.     {
    9.         $page = $SYS_VARS['PAGENAME'];
    10.         if (($ext == '') && ($userParams === ''))
    11.             $userParams = $_SERVER['QUERY']['STRING'];
    12.         if (($ext == '') && ($SYS_VARS['EXTPAGENAME'] != ''))
    13.             $ext = $SYS_VARS['EXTPAGENAME'];
    14.     }
    15.     else
    16.     {
    17. //      if (strpos($page, '/') === false && ($SYS_VARS['PAGEGROUP'] != $SYS_VARS['PAGE']['DEFDIR'])) $page = $SYS_VARS['PAGEGROUP'] . $page;
    18.         $dir = substr($page, 0, strrpos($page, '/'));
    19.         $page = substr($page, strlen($dir));
    20.         if (($dir != '') && is_dir($SYS_VARS['PAGE']['DIR'] . $dir))
    21.         {
    22.             $page = $dir . $page;
    23.         }
    24.         else if (is_dir($SYS_VARS['PAGE']['DIR'] . $SYS_VARS['PAGEGROUP'] . $dir))
    25.         {
    26.             $page = $SYS_VARS['PAGEGROUP'] . $dir . $page;
    27.         }
    28.     }
    29.  
    30.     if (!$userParams) $userParams = '';
    31.  
    32.     if (!$SESS->_COOKIE['NUMBER'])
    33.     {
    34.         $userParams = preg_replace('/sess\.id=[^;]+/i', '', $userParams);
    35.         if (!$userParams) $userParams = 'sess.id=' . $SESS->SYSDATA['NUMBER'];
    36.         else $userParams = 'sess.id=' . $SESS->SYSDATA['NUMBER'] . '&' . $userParams;
    37.     }
    38.  
    39.     list($dir, $pagename) = explode('/', $page, 2);
    40.     if ($dir.'/' == $SYS_VARS['PAGE']['DEFDIR']) $page = $pagename;
    41.  
    42.     if ($SYS_VARS['URL']['TYPE'] == 'path')
    43.     {
    44.         if ($SYS_VARS['PAGE']['LANG']['ENABLED'])
    45.         {
    46.             if ($setLang)
    47.             {
    48.                 if ($SYS_VARS['URL']['USELANG'])
    49.                     $page = $setLang . '/' . $page;
    50.                 else
    51.                 {
    52.                     if ($userParams) $userParams .= '&lang.name=' . $setLang;
    53.                     else $userParams = 'lang.name=' . $setLang;
    54.                 }
    55.             }
    56.             else if ($SYS_VARS['URL']['USELANG'])
    57.                 $page = $GLOBALS['LANG']->CURRENT['NAME'] . '/' . $page;
    58.         }
    59.  
    60.         if ($SYS_VARS['URL']['DIRECT'])
    61.             $path = $SYS_VARS['SITEPATH'] . $page;
    62.         else
    63.             $path = $SYS_VARS['SITEPATH'] . 'index.php/' . $page;
    64.  
    65.         if (($page != '') && (substr($path, -1)) != '/') $path .= '/';
    66.  
    67.         if (is_array($ext))
    68.             $ext = implode('/', $ext);
    69.         $path .= $ext;
    70.  
    71.         if ($SYS_VARS['ACTION']['ENABLED'] && (substr($page, -6) == 'action'))
    72.         {
    73. /*
    74.             list($pg, $params) = explode('?', $SYS_VARS['CMDLINE'], 2);
    75.             $newFrom = $SYS_VARS['THISPAGE'] . ($params ? '?'.$params : '');
    76.             if ($userParams) $userParams = 'from=' . base64_encode($newFrom) . '&' . $userParams;
    77.             else $userParams = 'from=' . base64_encode($newFrom);
    78. */
    79.             if ($_GET['FROM'])
    80.                 $newFrom = $_GET['FROM'];
    81.             else
    82.                 $newFrom = $SYS_VARS['CMDLINE'];
    83.  
    84.             if ($userParams) $userParams = 'from=' . base64_encode($newFrom) . '&' . $userParams;
    85.             else $userParams = 'from=' . base64_encode($newFrom);
    86.         }
    87.  
    88.         if ($userParams != '') $path .= '?' . $userParams;
    89.     }
    90.     else
    91.     {
    92.         $userParams = eregi_replace('[?&]page=[^&]+&?', '', $userParams);
    93.         $userParams = eregi_replace('^page=[^&]+&?', '', $userParams);
    94.         $userParams = eregi_replace('[?&]lang.name=[^&]+&?', '', $userParams);
    95.         $userParams = eregi_replace('^lang.name=[^&]+&?', '', $userParams);
    96.         $userParams = eregi_replace('[?&]ext=[^&]+&?', '', $userParams);
    97.         $userParams = eregi_replace('^ext=[^&]+&?', '', $userParams);
    98.         $userParams = eregi_replace('[?&]ext\[[^\]]*\]=[^&]+&?', '', $userParams);
    99.         $userParams = eregi_replace('^ext\[[^\]]*\]=[^&]+&?', '', $userParams);
    100.         $params = 'page=' . $page;
    101.  
    102.         if (is_array($ext))
    103.         {
    104.             foreach($ext as $k=>$v)
    105.                 $params .= '&ext[' . $k . ']=' . $v;
    106.         }
    107.         else if ($ext != '') $params .= '&ext=' . $ext;
    108.  
    109.         if ($SYS_VARS['ACTION']['ENABLED'] && (substr($page, -6) == 'action'))
    110.         {
    111.             if ($_GET['FROM'] && ($SYS_VARS['ACTIONPAGE']))
    112.                 $newFrom = $_GET['FROM'];
    113.             else
    114.                 $newFrom = $SYS_VARS['CMDLINE'];
    115.  
    116.             $params .= '&from=' . base64_encode($newFrom);
    117.         }
    118.  
    119.         if ($SYS_VARS['PAGE']['LANG']['ENABLED'] && $setLang)
    120.         {
    121.             if ($userParams) $userParams .= '&lang.name=' . $setLang;
    122.             else $userParams = 'lang.name=' . $setLang;
    123.         }
    124.  
    125.         if ($userParams != '') $params .= '&' . $userParams;
    126.  
    127.         if ($SYS_VARS['URL']['TYPE'] == 'encr') $path = $SYS_VARS['SITEPATH'] . 'index.php?data=' . base64_encode($params);
    128.         else $path = $SYS_VARS['SITEPATH'] . 'index.php?' . $params;
    129.     }
    130.  
    131.     return $path;
    132. }
    133. ?>
    134.