Поставил на Fedora Core 5 Apache 2.2.4 + PHP 5.2.1. Все ставил из исходников и Apache скомпилировал с mod_rewrite. Я в этом убедился из phpinfo() и httpd -l. Нужно решить слдующую задачу: Чтобы пользователя сайта при обращения ко всем несуществующим файлам и каталогам перебрасывало на index.php - казалось бы куда уж проще. Сделал виртуальный хост AllowOverride All поставил для поддержки .htaccess Залил для тестирования в директория виртуального хоста три файла - index.php test.php и .htaccess В .htaccess прописал слудующее: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*) index.php [L,QSA,NC] Все по документации!!! После всех этих телодвижений и рестарта Apache при обращении к странице test.php (которая 100% лежит в директории) перекидывает на страницу index.php. Все остальные страницы, которых нет в директории он конечно тоже перебрасывает на index.php но почему он тоже самое делает с директориями и страницами которые там есть??????????? Добавил в httpd.conf в настройки виртуального хоста логи для rewrite RewriteLog "/usr/local/apache2/logs/rewrite.log" RewriteLogLevel 8 После этого запросил страницу mysite.ru/test.php (она там есть и по всем rewrite правилам я должен был её увидеть в браузере) Получил в логах следующее: 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (3) [perdir /home/v54/] strip per-dir prefix: /home/v54/test.php -> test.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (3) [perdir /home/v54/] applying pattern '(.*)' to uri 'test.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (4) [perdir /home/v54/] RewriteCond: input='/home/v54/test.php' pattern='!-d' => matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (4) [perdir /home/v54/] RewriteCond: input='/home/v54/test.php' pattern='!-d' => matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (4) [perdir /home/v54/] RewriteCond: input='/home/v54/test.php' pattern='!-f' => not-matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (3) [perdir /home/v54/] strip per-dir prefix: /home/v54/test.php -> test.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (3) [perdir /home/v54/] applying pattern '(.*)' to uri 'test.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (2) [perdir /home/v54/] rewrite 'test.php' -> 'index.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (3) [perdir /home/v54/] add per-dir prefix: index.php -> /home/v54/index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (2) [perdir /home/v54/] trying to replace prefix /home/v54/ with / 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (5) strip matching prefix: /home/v54/index.php -> index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (4) add subst prefix: index.php -> /index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (1) [perdir /home/v54/] internal redirect with /index.php [INTERNAL REDIRECT] 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (3) [perdir /home/v54/] applying pattern '(.*)' to uri 'redirect:/index.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (4) [perdir /home/v54/] RewriteCond: input='redirect:/index.php' pattern='!-d' => matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (4) [perdir /home/v54/] RewriteCond: input='redirect:/index.php' pattern='!-d' => matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (4) [perdir /home/v54/] RewriteCond: input='redirect:/index.php' pattern='!-f' => matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (4) [perdir /home/v54/] RewriteCond: input='redirect:/index.php' pattern='!-f' => matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (2) [perdir /home/v54/] rewrite 'redirect:/index.php' -> 'index.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (3) [perdir /home/v54/] add per-dir prefix: index.php -> /home/v54/index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (2) [perdir /home/v54/] trying to replace prefix /home/v54/ with / 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (5) strip matching prefix: /home/v54/index.php -> index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (4) add subst prefix: index.php -> /index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (1) [perdir /home/v54/] internal redirect with /index.php [INTERNAL REDIRECT] 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (3) [perdir /home/v54/] strip per-dir prefix: /home/v54/index.php -> index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (3) [perdir /home/v54/] applying pattern '(.*)' to uri 'index.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (4) [perdir /home/v54/] RewriteCond: input='/home/v54/index.php' pattern='!-d' => matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (4) [perdir /home/v54/] RewriteCond: input='/home/v54/index.php' pattern='!-d' => matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (4) [perdir /home/v54/] RewriteCond: input='/home/v54/index.php' pattern='!-f' => not-matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (3) [perdir /home/v54/] strip per-dir prefix: /home/v54/index.php -> index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (3) [perdir /home/v54/] applying pattern '(.*)' to uri 'index.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (2) [perdir /home/v54/] rewrite 'index.php' -> 'index.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (3) [perdir /home/v54/] add per-dir prefix: index.php -> /home/v54/index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (1) [perdir /home/v54/] initial URL equal rewritten URL: /home/v54/index.php [IGNORING REWRITE] 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (3) [perdir /home/v54/] strip per-dir prefix: /home/v54/index.php -> index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (3) [perdir /home/v54/] applying pattern '(.*)' to uri 'index.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (4) [perdir /home/v54/] RewriteCond: input='/home/v54/index.php' pattern='!-d' => matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (4) [perdir /home/v54/] RewriteCond: input='/home/v54/index.php' pattern='!-d' => matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (4) [perdir /home/v54/] RewriteCond: input='/home/v54/index.php' pattern='!-f' => not-matched 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (3) [perdir /home/v54/] strip per-dir prefix: /home/v54/index.php -> index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (3) [perdir /home/v54/] applying pattern '(.*)' to uri 'index.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (2) [perdir /home/v54/] rewrite 'index.php' -> 'index.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (3) [perdir /home/v54/] add per-dir prefix: index.php -> /home/v54/index.php 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92d0058/initial/redir#1] (1) [perdir /home/v54/] initial URL equal rewritten URL: /home/v54/index.php [IGNORING REWRITE] Вроде бы все отлично но почему он делает вот это 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (3) [perdir /home/v54/] applying pattern '(.*)' to uri 'test.php' 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (2) [perdir /home/v54/] rewrite 'test.php' -> 'index.php' Хотя до этого он нашел этот файл в директории: 81.176.33.35 - - [17/May/2007:01:29:57 +0400] [v54.ru/sid#9146e78][rid#92c6840/initial] (4) [perdir /home/v54/] RewriteCond: input='/home/v54/test.php' pattern='!-f' => not-matched Как решить эту проблему? Очень срочно!!!!!!!!!!!!!!!!!!!!!
а использовать обработку 404й страницы не вариант что ли? =\ Код (Text): ErrorDocument 404 /index.php
Не вариант, потому что подобные правила нам нужно будет выполнять для нашего сайта, но более усложненные, и там не обойдешся 404 страницей
сделал у себя http://440hz.ru/trash/rewrite/ http://440hz.ru/trash/rewrite/test.php http://440hz.ru/trash/rewrite/foo.bar .htaccess Код (Text): RewriteEngine On RewriteBase /trash/rewrite/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*) index.php [L,QSA,NC] index.php PHP: <? print 'index report: '.htmlentities($_SERVER['REDIRECT_URL']); ?> test.php PHP: <? print 'test'; ?> может дело в RewriteBase?
Я все испытывал на виртуальном хосте <VirtualHost *:80> DocumentRoot "/home/v54" ServerName v54.ru ServerAlias *.v54.ru RewriteLog "/usr/local/apache2/logs/rewrite.log" RewriteLogLevel 8 <Directory "/home/v54"> Allow from all Options Indexes FollowSymLinks AllowOverride All Order allow,deny </Directory> </VirtualHost> Какой мне прописать RewriteBase посоветуйте пожалуйста?