За последние 24 часа нас посетили 18739 программистов и 1685 роботов. Сейчас ищут 1747 программистов ...

htaccess не работает RewriteRule

Тема в разделе "Настройка веб-сервера", создана пользователем EugenePhp, 18 июл 2016.

Метки:
  1. EugenePhp

    EugenePhp Новичок

    С нами с:
    18 июл 2016
    Сообщения:
    7
    Симпатии:
    0
    На сайте с ЧПУ есть папки, имена которых совпадают с частью урл, например,
    http://site.ru/qqq
    и есть папка qqq
    В файле htaccess задано:
    -------------
    <ifModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^aaa$ man/tst2.php [QSA,L]
    </ifModule>
    -------------
    При задании адреса в браузере http://site.ru/qqq, идет попытка перейти в папку qqq.
    Как это можно исправить?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Добавить условие "не каталог" как это обычно делается. То есть "всего" должно получиться "если не файл и не каталог тогда рерайт на такой-то файл". Это раз. И два - в описании каталог qqq, а в руле - aaa отсекается как-то...
     
  3. EugenePhp

    EugenePhp Новичок

    С нами с:
    18 июл 2016
    Сообщения:
    7
    Симпатии:
    0
    Спасибо за ответ, но у меня раньше стояло
    RewriteCond %{REQUEST_FILENAME} !-d
    т.е. применять правила, если не каталог.
    Я его убрал, т.к. не работало, а содержимое htaccess, конечно же там стоит qqq)
    ------
    <ifModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^qqq$ man/tst2.php [QSA,L]
    </ifModule>
    ------
    т.е. стоит !-d или нет, все равно не работает.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а, понял. ты хочешь вообще все запросы направлять в другой файл, даже если есть такой файл/каталог?
     
  5. EugenePhp

    EugenePhp Новичок

    С нами с:
    18 июл 2016
    Сообщения:
    7
    Симпатии:
    0
    немного не так
    хочу, чтобы даже, если есть такая папка, то все равно должно сработать правило
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Именно так я и сказал. Только сбоку.
     
  7. EugenePhp

    EugenePhp Новичок

    С нами с:
    18 июл 2016
    Сообщения:
    7
    Симпатии:
    0
    но, не работает зараза)
    на сервере стоит Apache/2.4.12
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ну так добавь отдельную секцию Если урл начинается с кукуку то редирект на такой-то файл.
     
  9. EugenePhp

    EugenePhp Новичок

    С нами с:
    18 июл 2016
    Сообщения:
    7
    Симпатии:
    0
    Добавил
    ---
    <ifModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    # RewriteCond %{REQUEST_FILENAME} !-d

    RedirectMatch 302 ^qqq$ man/tst2.php
    # RewriteRule ^qqq$ man/tst2.php [QSA,L]
    </ifModule>
    ---
    то же самое, выдает
    Forbidden
    You don't have permission to access /qqq/ on this server.
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    А откуда редиректмач вообще появился? Что не ясно в русскими буквами написанной фразе:
    ?

    У меня вот так почему-то работает как требуется:
    Код (Text):
    1. RewriteEngine On
    2. RewriteBase /
    3.  
    4. RewriteCond %{REQUEST_URI} ^/qqq/
    5. RewriteRule .* bbb/file.php [L]
    6.  
    7. RewriteCond %{REQUEST_FILENAME} !-f
    8. RewriteCond %{REQUEST_FILENAME} !-d
    9. RewriteRule .* index.php [L]
    что я делаю не так?
     
  11. EugenePhp

    EugenePhp Новичок

    С нами с:
    18 июл 2016
    Сообщения:
    7
    Симпатии:
    0
    Я новичок в htaccess, поэтому пытался сделать простой редирект через RedirectMatch.
    Но, кажется понял, что RewriteCond можно использовать несколько раз и по нему фильтровать обработку.
    Так действительно работает.
    Спасибо.
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Рекомендую тебе сходить почитать мануал. В рерайтере всего 6 директив. Из них одна его тупо включает. Итого пять. (c) Одна из моих любимых фраз.
    И обязательно ознакомься с тем как включить отладку рерайтера и научись читать логику разрешения запроса.
     
  13. EugenePhp

    EugenePhp Новичок

    С нами с:
    18 июл 2016
    Сообщения:
    7
    Симпатии:
    0
    ок, спасибо.