За последние 24 часа нас посетили 54337 программистов и 1767 роботов. Сейчас ищут 1475 программистов ...

Серьезная проблема с mod_rewrite в Apache 2.2.4

Тема в разделе "Прочие вопросы по PHP", создана пользователем nervouselectronic, 17 май 2007.

  1. nervouselectronic

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

    С нами с:
    29 апр 2007
    Сообщения:
    54
    Симпатии:
    0
    Поставил на 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

    Как решить эту проблему?
    Очень срочно!!!!!!!!!!!!!!!!!!!!!
     
  2. pel

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

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    а использовать обработку 404й страницы не вариант что ли? =\

    Код (Text):
    1. ErrorDocument 404 /index.php
     
  3. nervouselectronic

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

    С нами с:
    29 апр 2007
    Сообщения:
    54
    Симпатии:
    0
    Не вариант, потому что подобные правила нам нужно будет выполнять для нашего сайта, но более усложненные, и там не обойдешся 404 страницей
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
  5. nervouselectronic

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

    С нами с:
    29 апр 2007
    Сообщения:
    54
    Симпатии:
    0
    Я все испытывал на виртуальном хосте

    <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 посоветуйте пожалуйста?