обсуждение способов редиректа ^.*$ на srv.php

  • Автор темы tristram
  • Дата начала

tristram

Guest
обсуждение способов редиректа ^.*$ на srv.php

www.site.com/content/31337 значительпо проще запомнить чем например www.site.com/index.php?mod=content&id=31337, таким примеров горы!
начну с того что для этого надо прописать
RewriteEngine On
RewriteRule ^.*$ srv.php?$1
в .htaccess.
таким образом ВСЕ http-запросы будут перенаправлены в srv.php, а он в свою очеред будет анализировать $REQUEST_URI.
может быть было бы логичнее прописать правила прямо в .htaccess, и не прибегать к помощи php в данном случаи, т.к запуск скрипта это тоже кушает ресурсов, хоть и мало.
рассмотрим случай с srv.php:
во-первых нам надо создать массив $redirect вида
[0]=>array(pattern,url,redirect),
[1]=>array(pattern,url,redirect),

где pattern это регулярное выражение, а url это линк куда будет перенаправлен юзер если регулярное выражение удоволетворяет запросу, а redirect это булеан, если true, то будет header("location: url");, это актуально при ридеректе со старых ссылок (например при смене движка), а если false, то будет прочтено содержание файла и выдано юзеру. также должен отметить что если расширение параметра redirect будет php|php3|shtml то будет не чтение а include.

-~{}~ 05.07.04 02:51:

пиши в .htaccess:
PHP:
RewriteEngine On
RewriteRule ^.*$ srv.php?$1
затем создавай srv.php и пиши туда:
PHP:
<?php
$redirect = array(
array("/www","http://ccteam.ru",true),
array("^/","index.php",false)
);
$phpext = array("php","php3","shtml");
foreach($redirect as $unit)
{
 if (ereg($unit[0],$REQUEST_URI))
 {
  $url = ereg_replace($unit[0],$unit[1],$REQUEST_URI);
  if($unit[2])
  {
   header("location: ".$url);
  }
  else
  {
   $ext = explode(".",$unit[1]);
   $b = count($ext)-1;
   $ext = $ext[$b];
   if (in_array($ext,$phpext))
   {
    @include(str_replace("//","",$unit[1]));
   }
   else {@readfile(str_replace(":","",$unit[1]));}
  }
  break;
 }
}
?>
не стану описавать то что можно получать $redirect из базы, написать админовку управления редиректами, и т.д.

еще есть траблы с редиректами картинок, но и они решаемы простым регулярным вырожением.
 

lucas

Guest
1. Где здесь вопрос?

2. Если уж взялся что-то "публиковать", давай нормальный код, а не эту чушь.
 

Demiurg

Guest
1.
RewriteRule ^.*$ srv.php?$1
зачем то, что выделено болдом ? ты это нигде не используешь.
2.
не надо создавать супер универсальных вещей, они получаются супер сложными.
3.
достаточно брать первое слово до слеша в урле, потом в массиве $redirect искать элемент с таким индексом и подключать указаный там скрипт.
4.
избався от собак.
5.
к чему был этот пост я так и не понял.
 

tristram

Guest
Demiurg, просто много постов нынче про ЧПУ, вот и выложил скрипт.

Вопрос в том как сделать норм отображение картинок.
 

Demiurg

Guest
tristram
ты до сих пор думаешь, что твой скрипт может служить примером ?

>Вопрос в том как сделать норм отображение картинок.
ты о чем ?
 

tristram

Guest
Demiurg, если RewriteRule ^.* srv.php, то запросы на папку image (где картинки) тоже отправляются на srv.php, и я еще не придумал как сделать так чтоб они нормально отображались.
 

Demiurg

Guest
в папке с картинками делаем .htaccess с единственной строчкой:
RewriteEngine Off
 

ton

Guest
у меня постоянно ошибка сервера когда я
в .htaccess пишу:

RewriteEngine On
RewriteRule ^.*$ srv.php?$1

или чтото иное такого типа, что делать?
Спасибо!
 

lucas

Guest
Скорее всего, нужно подключить mod_rewrite.so к веб-серверу.
Детальное описание ошибки см. в лог-файле веб-сервера.
 
Сверху