Как заменить связку Action и AddHandler на директивы mod_rewrite?

Xlam

Новичок
Как заменить связку Action и AddHandler на директивы mod_rewrite?

Надо, чтобы при вводе в адресную строку адреса типа http://www.site.ru/news/3.html происходило следующее:

1) управление передавалось бы скрипту /index.php
2) при этом переменная REQUEST_URI содержала бы /news/3.html
3) в адресной строке сохранился бы исходный адрес запроса http://www.site.ru/news/3.html

Для решения поставленной задачи очень удобно было использовать связку Action и AddHandler в .htaccess:

Action allhandler /index.php?
AddHandler allhandler .html

Все работало отлично, пока хостинг не поломали. Админы переустановили apache (был 1.33, посставили 2.0.54). Теперь на адреса вроде http://www.site.ru/news/3.html сервер выдает 404 Not Found. Что правильно, ведь на самом деле таких html файлов нет и информация берется из базы на остнове REQUEST_URI. Сначала думал не обрабатывается .htaccess. Достал конфиги апача, вроде бы все как надо:

AccessFileName .htaccess

<VirtualHost www.site.ru>
ErrorDocument 404 /404.htm

DocumentRoot /sites/www.site.ru
ServerName www.site.ru
DirectoryIndex index.htm index.html index.php index.pl index.php3
<Directory "/sites/www.site.ru">
Options Includes FollowSymLinks
AllowOverride AuthConfig Limit FileInfo
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

Имя .htaccess не изменено. AllowOverride FileInfo для каталога сайта прописано, значит Action и AddHandler должны работать (даже проверил загружены ли соотв. модули), ан нет! В чем же дело? Я так и не разобрался.

Ну чтож, сайт надо как-то возвращать в работоспособное состояние. Возникло желание обойти проблему с помощью mod_rewrite, копание в доке и несколько неудачных попыток ничего не дали.

Подскажите нужные директивы mod_rewrite?
 

CBEugene

Новичок
У меня тоже состоялся переезд с Apache 1.3.xx на Apache 2.2.2
Тоже перестал через хандлеры перекидывать пришлось на mod_rewrite переделать:

содержимое .htaccess
---8<---
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^.htaccess$ - [F]
RewriteRule ^([^.]+)/$ /index.php
RewriteRule ^([^.]+)$ /index.php
--->8---

RewriteRule ^([^.]+)/$ /index.php - это павило ловит "/" на конце
RewriteRule ^([^.]+)$ /index.php - это правило ловит без "/" на конце.

PS: Кстати, правила ловят все кроме того что с "." в имени. Т.е. "/news" и "/news/" отловят а "/news.htm" - нет! если надо для .htm тогда
что-то типа "RewriteRule ^(.*)\.htm$ /index.php" надо будет написать ...
 

Xlam

Новичок
Хм, это правило встречается на каждом шагу, но я наступил на грабли, написав в конце [R=permanent]
;). Спасибо, теперь все работает отлично!

P.S. Интересно все же, почему не работают эти хендлеры во втором апаче? Вопрос остается открытым...
 
Сверху