Почему может не работать этот rewrite? (htaccess)

Тема в разделе "PHP", создана пользователем SoaringHawk, 30 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. SoaringHawk

    SoaringHawk Постоялец

    Регистр.:
    25 апр 2009
    Сообщения:
    61
    Симпатии:
    2
    PHP:
    RewriteCond %{REQUEST_URI} ^/?tag=(.*)$
    #RewriteCond %{REQUEST_FILENAME} !-f
    #RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ /folder/?tag=%[R=301,L]
    :nezn:
    При запросе "/?tag=bla-bla-bla" по заголовкам отдается HTTP200...
    Добавил в индексный скрипт echo $_SERVER['REQUEST_URI']. Пишит "/?tag=bla-bla-bla", т.е. по идее должен был сработать реврайт, но не срабатывает почему-то. :confused:

    В чем ошибка?
     
  2. AleksWhite

    AleksWhite Постоялец

    Регистр.:
    5 фев 2008
    Сообщения:
    55
    Симпатии:
    10
    в .htaccess
    есть такие строки?
    Код:
    RewriteEngine On
    RewriteBase   /
    
    А вообще о модуле можно почитать Перейти по ссылке
     
  3. SoaringHawk

    SoaringHawk Постоялец

    Регистр.:
    25 апр 2009
    Сообщения:
    61
    Симпатии:
    2
    Да, конечно :)
    Ват сам код:
    Код:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    
    [COLOR=Red][B]RewriteCond %{REQUEST_URI} ^/\?tag=(.*)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ /folder/?tag=%1 [R=301,L][/B][/COLOR]
    
    RewriteCond %{REQUEST_URI} ^/(index|default|main)\.([ps]?htm[l]?|php[0-9]?)(.*)$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ /%3 [R=301,L]
    
    RewriteCond %{REQUEST_URI} ^/([0-9]+)-.+\.html$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /?p=%1 [L]
    Все правила срабатывают когда положено, кроме выделенного куска.
     
  4. sunnybear

    sunnybear Читатель

    Заблокирован
    Регистр.:
    30 май 2009
    Сообщения:
    9
    Симпатии:
    0
    С точки зрения Apache он запрашивает не /folder/, а /folder/index.php (или еще что). Соответственно, /\?tag= никогда не срабатывает. Может быть, пойдет index.php?tag=
     
  5. SoaringHawk

    SoaringHawk Постоялец

    Регистр.:
    25 апр 2009
    Сообщения:
    61
    Симпатии:
    2
    Нашел в чем причина. :yahoo:
    В скрипте, переменная $_SERVER['REQUEST_URI'] содержит параметры (после "?"), а в htaccess %{REQUEST_URI} - нет. Поэтому правило и не срабатывало. :)

    Вот так работает как положено:
    Код:
    RewriteCond %{REQUEST_URI} ^/(index\.php)?$
    RewriteCond %{QUERY_STRING} ^(tag|page)=(.*)$
    RewriteRule ^.*$ /folder/?tag=%2 [R=301,L]
     
  6. gggggh

    gggggh Создатель

    Регистр.:
    10 апр 2009
    Сообщения:
    10
    Симпатии:
    0
    А как запретить просмотр существующих файлов?
     
  7. lucky_priest

    lucky_priest Создатель

    Регистр.:
    16 ноя 2009
    Сообщения:
    20
    Симпатии:
    7
    RewriteCond %{REQUEST_FILENAME} !-f
    для файлов
    RewriteCond %{REQUEST_FILENAME} !-d
    для директорий
     
Статус темы:
Закрыта.