mod_rewrite - помогите!

BNS

Новичок
mod_rewrite - помогите!

У меня на сайте следующая файловая система:
Код:
content/
  contacts/
    index.txt
    ourcontacts.txt
  media/
    index.txt
    video.txt
    audio.txt
и т.д. - то есть движок вбивает в щаблон ХТМЛ из тхт файлов.
Обращения к этим файлам, к примеру, такие
index.php?cat=contacts&view=index

Задача: переписать ури с content/contacts/index на index.php?cat=contacts&view=index

Я пытался сделать это так:

RewriteRule ^/content/(.*)/(.*)$ /index.php?cat=$1&view=$2

Не помогло... Потом я сделал так:

.htaccess:

Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^content/(.*)$ links.php?%{REQUEST_URI} //передаем весь запрос РНР файлу
links.php:
Код:
$flag=strpos($QUERY_STRING,"content/"); //проверка, надо ли переписывать
if ($flag===false) { //если не надо
  header("Location: " . $QUERY_STRING); //просто так и открываем
} else {
  $link=substr($QUERY_STRING,8); //отрезаем content/
  $link=str_replace(".php","",$link); //отрезаем .php
  list($cat,$view)=split("/", $link); //разбиваем
  require "index.php"; //в этом файле - ХТМЛ, переменные cat и  view определены - все в порядке.
}
Сами понимаете, это избыточно, хоть и работает...

Маленькое замечание...

При переписывании чего-то вроде

/content/media надо получить index.php?cat=media

а при

/content/media/audio надо получить index.php?cat=media&view=audio

Как писать if'ы на языке mod_rewrite - я не знаю... Вроде через rewrite_cond, но в этом я разобраться не смог...
 

Popoff

popoff.donetsk.ua
RewriteEngine on
Options FollowSymlinks
RewriteRule ^content/([^/]+)/?$ links.php?cat=$1 [QSA]
RewriteRule ^content/([^/]+)/([^/]+)/?$ links.php?cat=$1&view=$2 [QSA]

что-то типа этого, если я не очепятался :)
 

BNS

Новичок
Очепятался =) Не links.php, а index.php ;)

Работает =)

Баги с картинками

print "\n<base href=\"http://" . $GLOBALS[HTTP_HOST] . "/\">";

фиксить, или есть способы лучше?

И еще вопросик... Почему на хостинге все работает, а дома ощущение, что .htaccess вообще не обрабатывается? В httpd.conf что-то должно быть написано, чтобы файл обрабатывался?

httpd.conf
Код:
<Directory "C:/www/Apache/htdocs">
    Options Indexes Includes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

[...]

AccessFileName .htaccess

Если

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

закомментирован, то сервер выдает 500... А если нет - то .htaccess не обрабатывается
-~{}~ 08.02.05 21:18:

Идиотизм!

LoadModule rewrite_module modules/mod_rewrite.so - раскомментирована, файл - есть, но ничего не работает :(

Выкачал исходники mod_rewrite.c и mod_rewrite.h и кинул их в modules/standard - заработало =)

Все круто, всем спасибо!
 
Сверху