Исключить конкретный тип файлов из обработки.

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем indian.rider, 26 ноя 2008.

Статус темы:
Закрыта.
  1. indian.rider

    indian.rider Постоялец

    Регистр.:
    20 окт 2008
    Сообщения:
    119
    Симпатии:
    26
    Мне не нужно чтобы css файлы НЕ попадали в редирект на index.php

    И, что важно, css файл физически не существует. Он генерится. Конструкция RewriteCond %{REQUEST_FILENAME} !-f на него не подействует.

    Должно быть что-то похожее на это:

    RewriteCond %{REQUEST_URI} *что-то здесь*
    RewriteCond %{REQUEST_URI} ^/(csv|news|includes|tags|archive|search|P[0-9]{2,8}) [NC]
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    И я не могу понять какое условия нужно вставить в первую строку.

    А еще кажется что тут просто... но 2 часа уже убил.
     
  2. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    писать не [NC] а [L,NC]
    чтоб этот урл дальше не обрабатывался. о тогда не дойдет до вашего
    RewriteRule ^(.*)$ /index.php?/$1 [L]
     
  3. indian.rider

    indian.rider Постоялец

    Регистр.:
    20 окт 2008
    Сообщения:
    119
    Симпатии:
    26
    Пытаюсь сделать правило типа этого:

    RewriteCond %{REQUEST_URI} !^(.*\.css) [L,NC]

    Валиться 500 ошибка.

    а если так:

    RewriteCond %{REQUEST_URI} !^(.*\.css) [NC]

    происходит перенаправление на index.php

    Я Вас правильно понял?
     
  4. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Чего-то я видать не понял.
    То что не работает RewriteCond %{REQUEST_FILENAME} !-f это правильно, т.к. файла нет на самом деле.

    У Вас ведь файл куда-то генерируется. Генерируйте файл, а уже потом грузите страницу которая его использует и будет счастье. Может попробуете описать как оно работает и как должно более подробно.
     
  5. indian.rider

    indian.rider Постоялец

    Регистр.:
    20 окт 2008
    Сообщения:
    119
    Симпатии:
    26
    Похоже, что я вообще не с того конца начал.

    Проблемы с css вторичны, и вылезли в ходе решения первой проблемы. Пока их можно опустить.

    Основная Задача:

    Есть такой путь:

    1. mysite/news/19/11/2008/224318/

    и такой:

    2. mysite/news/224318/

    а настоящий путь такой:

    3. mysite/index.php/news/19/11/2008/224318/

    Задача в том, чтобы работали первый и второй, а третий он типа реальный и на него происходит переадресация при помощи правил. Но его не видно.

    Первый и второй путь -- чтобы сохранить совместимость между старой и новой версией. Определяющим в обоих случаях является id новости: 224318


    Более того, думаю, что можно при вводе mysite/news/19/11/2008/224318/ превращать в это mysite/news/224318/ через [R]

    Не знаю только как поисковики к этому отнесуться. Редирект все же.

    Опять же:

    RewriteRule ^news\/[0-9]{2}\/[0-9]{2}\/[0-9]{4}\/([0-9]{1,10})\/? /news/$1 [R]

    RewriteRule ^(.*)$ /index.php/$1 [L]

    Ошибка 500

    Каждое правило работает по отдельности, но вместе никак.
     
  6. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Вам нужно все эти три ссылки в rewrite_engine привести к виду?
    index.php?page=news&id=224318

    Тогда пишите следующее
    ^news/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)/$ ?page=news&id=$4
    ^news/([0-9]+)/$ ?page=news&id=$1

    P.S. этого делать не надо
    RewriteRule ^news\/[0-9]{2}\/[0-9]{2}\/[0-9]{4}\/([0-9]{1,10})\/? /news/$1 [R]
     
    indian.rider нравится это.
  7. indian.rider

    indian.rider Постоялец

    Регистр.:
    20 окт 2008
    Сообщения:
    119
    Симпатии:
    26
    Согласен, но кроме ^news... есть ссылки котрые можно было автоматом пускать на index.php

    И очень бы хотелось иметь строчку в самом конце типа RewriteRule ^(.*)$ /index.php/$1/

    индекс поймет все остальные случаи.

    Но такая строчка -- ошибка 500.

    Добавлено через 52 секунды
    А почему? Хотя и сам чувствую что не стоит. Не не знаю почему.
     
  8. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Потому что таким образом Вы двойной редирект сделаете. Тем более что я описал как его напрямую пустить.

    Ну так пишите для других ссылок подобные правила, уверен что количество разделов у Вас не бесконечное.

    Вот Вам строка
    RewriteRule ^(.*)$ index.php?$1 [L,QSA]
    все что не файл, каталог уходит в index.php
     
  9. indian.rider

    indian.rider Постоялец

    Регистр.:
    20 окт 2008
    Сообщения:
    119
    Симпатии:
    26
    Ладно, с двойным редиректом, пока на слово поверю. Потом пойму :)

    Не могу понять как работает [L,QSA]... смотрю в документацию и... вижу фигу ;)

    ---

    У меня получилось вот таким образом отделить специальные (news) от всех остальных:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^news\/[0-9]{2}\/[0-9]{2}\/[0-9]{4}\/([0-9]{1,10})\/? /index.php/news/$1/
    RewriteRule ^news\/([0-9]{1,10})\/? /index.php/news/$1/

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^(news.*)
    RewriteRule ^(.*)$ /index.php/$1/

    Это нормальное решение?
     
  10. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Есть такое понятие ка избыточность
    дважды написано
    RewriteCond %{REQUEST_FILENAME} !-f
    а так если все работает то норма
     
Статус темы:
Закрыта.