mod_rewrite и сегменты

Тема в разделе "ExpressionEngine", создана пользователем indian.rider, 27 ноя 2008.

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

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

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

    и это: mysite/news/10/11/2008/224372/

    и это: mysite/news/224372/

    отдавало новость с этим id: 224372

    И вот что обнаружил, если у меня есть правила тпа этих:

    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/

    то я получаю странные сегменты:

    1. если путь = mysite/news/10/11/2008/224372/

    то сегменты:

    segment 1: index.php
    segment 2: news
    segment 3: 224372
    segment 4: 10
    segment 5: 11
    segment 6: 2008
    segment 7: 224372

    2: если путь = mysite/news/224372/

    то сегменты:

    segment 1: index.php
    segment 2: news
    segment 3: 224372
    segment 4: 224372

    И совершенно случайно попробовал без правил mod_rewrite:

    1. если путь = mysite/news/10/11/2008/224372/

    то сегменты:

    segment 1: news
    segment 2: 10
    segment 3: 11
    segment 4: 2008
    segment 5: 224372

    2: если путь = mysite/news/224372/

    то сегменты:

    segment 1: news
    segment 2: 224372

    Получается, что работа с сегментами практически исключает работу с mod_rewrite? Я в недоверии и восторге одновременно...
     
  2. indian.rider

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

    Регистр.:
    20 окт 2008
    Сообщения:
    119
    Симпатии:
    26
    Господа, я погорячился.

    Для того, чтобы ЕЕ понял, что это одиночная страница, id должен идти во втором сегменте. Поэтому правила нужны.

    А хрень с сегментами у меня получалась потому, что я не ставил [L] в конце правил.

    Небольшой пример:

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

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

    И после мы получаем сегменты:

    segment 1: news
    segment 2: 224372

    и в этом случае:

    http://mysite/news/10/11/2008/224372/

    и в этом:

    http://mysite/news/224372/

    Если вопросов нет -- можно закрывать тему.
     
Статус темы:
Закрыта.