Проблемы с Apache mod-rewrite

Discussion in 'PHP' started by [hidden], 19 Aug 2006.

  1. [hidden]

    [hidden] Elder - Старейшина

    Joined:
    5 Nov 2005
    Messages:
    70
    Likes Received:
    19
    Reputations:
    7
    Есть правило в .htaccess

    RewriteEngine On

    RewriteRule ^res/([a-z]+)/([0-9]+)-([0-9]+)/(.+)\.html$ /res.php? db_name=$1&id_razdel=$2&num=$3&req=$4&mode=all

    В браузере я вызываю http://site.myhost/res/hui/1-3/%C1%EB%FF%E4%E8.html --- стопроцентно подходит под правило. Но! Правило не срабатывает - если поставить аргумент [R] (редирект), то не редиректится на истинный URL и вызывается скрипт res.php без каких-либо аргументов.

    Более того, если стереть файл .htaccess и обновить страницу, то..... вызовется тот же скрипт res.php без параметров - я не понимаю уже, что происходит, откуда берется информация, ведь директорий и файлов таких нету..

    Не подскажете, куда смотреть, где проблема?

    UPD: Я использую Denwer (Apache 1.3.33, PHP 4.4.0), mod-rewrite поддерживается.
     
    #1 [hidden], 19 Aug 2006
    Last edited: 19 Aug 2006
    1 person likes this.
  2. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    интересно что вернет мне твой скринпт при запросе
    http://site.myhost/res/mysql/1-1/' UNION SELECT blablabla /*.html
    =)))))) а вообще попробуй вместо "+" юзать "*"... на свой страх и риск....
     
    _________________________
  3. SMiX

    SMiX Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    Вроде да.. Может, RewriteBase стоит определить?
     
  4. [hidden]

    [hidden] Elder - Старейшина

    Joined:
    5 Nov 2005
    Messages:
    70
    Likes Received:
    19
    Reputations:
    7
    2Trinux: ууууу, тогда в титле будет написано "' UNION SELECT blablabla /*" =) Кукисы и сессии не используются, к БД последняя строчка отношения не имеет..
    В регулярном выражении + означает, что есть один и более символов, * - ноль и более, так что тут походу больше подходит +..

    2SMiX: гм... так в том-то и дело, что база - одна, папок _никаких_ нет, на хосте будут лежать только десяток скриптов и все.. Но спасибо, я посмотрю насчет этого.
     
  5. [hidden]

    [hidden] Elder - Старейшина

    Joined:
    5 Nov 2005
    Messages:
    70
    Likes Received:
    19
    Reputations:
    7
    По логам RewriteLog:

    127.0.0.1 - - [19/Aug/2006:16:32:16 +0400] [site.myhost/sid#a09938][rid#ae3208/initial] (3) [per-dir z:/home/myhost/site/] add path-info postfix: z:/home/myhost/site/hui -> z:/home/myhost/site/hui/2/
    127.0.0.1 - - [19/Aug/2006:16:32:16 +0400] [site.myhost/sid#a09938][rid#ae3208/initial] (3) [per-dir z:/home/myhost/site/] strip per-dir prefix: z:/home/myhost/site/hui/2/ -> hui/2/

    это правильно, дальше

    127.0.0.1 - - [19/Aug/2006:16:32:16 +0400] [site.myhost/sid#a09938][rid#ae3208/initial] (3) [per-dir z:/home/myhost/site/] applying pattern '^([a-z]+)/([0-9]+)/$' to uri 'hui/2/'
    127.0.0.1 - - [19/Aug/2006:16:32:16 +0400] [site.myhost/sid#a09938][rid#ae3208/initial] (2) [per-dir z:/home/myhost/site/] rewrite hui/2/ -> /res.php?db_name=hui&id_razdel=2

    Все ок.

    А вот после этого.....

    127.0.0.1 - - [19/Aug/2006:16:32:16 +0400] [site.myhost/sid#a09938][rid#ae3208/initial] (1) [per-dir z:/home/myhost/site/] internal redirect with /res.php [INTERNAL REDIRECT]

    ВСЕ. После этого применяется паттерн именно к res.php, а не к тому, что требуется (res/hui/1-3/%C1%EB%FF%E4%E8.html)

    Кто-нибудь в курсе, что происходит? =) Откуда взялось "внутренее перенаправление"????
     
  6. [hidden]

    [hidden] Elder - Старейшина

    Joined:
    5 Nov 2005
    Messages:
    70
    Likes Received:
    19
    Reputations:
    7
    Короче, проблему я решил.. Вернее, я вылечил симптомы болезни, а не ее причину=(((

    Более тщательно посмотрев лог RewriteLog, я поставил .php после res..

    RewriteRule ^res.php/([a-z]+)/([0-9]+)-([0-9]+)/(.+)\.html$ /res.php? db_name=$1&id_razdel=$2&num=$3&req=$4&mode=all

    Такого URL нет! Это неправильно! Но это по непонятным причинам работает!
    Теперь при вызове http://site.myhost/res/hui/1-3/%C1%EB%FF%E4%E8.html
    вызывается правило ^res.php/([a-z]+)/([0-9]+)-([0-9]+)/(.+)\.html$ .......

    Колдунство (с), блин.
     
    #6 [hidden], 19 Aug 2006
    Last edited: 19 Aug 2006