Ссылки по дате на mod_rewrite

DenVeroid

Новичок
Ссылки по дате на mod_rewrite

Здравствуте, помогите разобраться, пытаюсь сделать ссылки чтобы они были такого вида

http://localhost/sitenews/news/2005/02/26/121.html
в место
http://localhost/sitenews/news_list.php?category=news&y=2005&m=02&d=26&nid=121

составил регулярку на модреврайте

RewriteRule ^([a-zA-Z]*)?/?([0-9]{4})?/?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]*)/$ sitenews/news_list.php?category=$1&y=$2&m=$3&d=$4
RewriteRule ^([a-zA-Z]*)?/?([0-9]{4})?/?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]*)?/?.html$ sitenews/news_review.php?category=$1&y=$2&m=$3&d=$4&nid=$5


от сюда видно что подрробная новость выводиться через файл news_review.php
а список новостей выводится через news_list.php

всё работает как нужно, проблема заключается только водном, почему когда я набираю ссылку
http://localhost/sitenews/ или так http://localhost/sitenews/index.php да любой другой файл то мне выводиться сообщение о том что нет такой новости, сообщение выводиться через файл news_list.php
так вот как сделать чтобы этого небыло, и страница грузилась через файл index.php поскольку это главная страница


извиняюсь если что не вту тему обратился
 

SiMM

Новичок
> всё работает как нужно
Если бы всё работало, вопросов бы не было вообще :)

> почему когда я набираю ссылку http://localhost/sitenews/ или так http://localhost/sitenews/index.php да любой другой файл то мне выводиться сообщение о том что нет такой новости, сообщение выводиться через файл news_list.php
А головой подумать?
PHP FAQ: Регулярные выражения.
 

DenVeroid

Новичок
блин, ну я поразному пытался делать, неполучается, поэтому я сюда обратился
 

SiMM

Новичок
RewriteRule ^sitenews/(news)/([0-9]{4})/([0-9]{1,2}/([0-9]{1,2})/([0-9]+)\.html news_rewiew.php?category=$1&y=$2&m=$3&d=$4&nid=$5 [L,QSA]
Остальные детали - в FAQ'ах
 

DenVeroid

Новичок
Огромное спасибо, за документацию

правило я переделал таким образом


RewriteRule ^([a-zA-Z]*)?/?([0-9]{4})?/?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]*)?/{0,1}$ sitenews/news_list.php?category=$1&y=$2&m=$3&d=$4 [L]
RewriteRule ^([a-zA-Z]*)?/?([0-9]{4})?/?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]*)?/?.html$ sitenews/news_review.php?category=$1&y=$2&m=$3&d=$4&nid=$5

теперь работает как и хотел

-~{}~ 01.11.05 13:56:

упс, чёт опять немного не то, я проверял так http://localhost/sitenews/index.php всё нормально, но если запустить так
http://localhost/sitenews/
то таже прорблема
 

SiMM

Новичок
чЕтай ещё.
Первое правило у тебя будет срабатывать всегда (почти всегда). Почему? Потому что с регулярками тебе всё таки придётся разобраться самому. Либо ты не понимаешь смысла некоторых вещей, которые используешь - в таком случае, не используй их (например, замечено бессмысленное использование "?"). Как только ты поймёшь, что они тебе всё таки нужны - лезь в мануал и разбирайся, зачем они нужны и что делают.
 

DenVeroid

Новичок
например, замечено бессмысленное использование "?".
это если прислучии адрес наберётся бес слэша например вместо 2005/02/26/
будет набранно 2005/02/26
то в этом случии страница будет не найденно, поэтому я их прописал для всех датируемых каталогов и для категории тоже

Первое правило у тебя будет срабатывать всегда (почти всегда).
извини, чесное слово помоги, будь другом, как его можно обойти?
регулярки я читаю, но невсё же сразу
 

SiMM

Новичок
> это если прислучии адрес наберётся бес слэша например вместо 2005/02/26/ будет набранно 2005/02/26
Для этого необходимо и достаточно одного "?". У тебя же их - туева хуча. При том разумнее сделать ДВА правила, а не одно (первое делает редирект на правильный URL, если забыли слэш, второе - выполняет необходимые действия).

> извини, чесное слово помоги, будь другом, как его можно обойти?
Я тебе дал пример. Отталкивайся от него.
PS: если тебе сложно сделать всё одним правилом - делай несколькими простыми.
 

Green

Новичок
Насколько я понимаю, можно сделать так:
Делаешь каталог sitenews/news
туда суешь свой .htaccess
а в каталог sitenews суешь .htaccess
c RewriteEngine off
 

DenVeroid

Новичок
вообщем я решил свою проблему, ссылка теперь уже не такая

http://localhost/sitenews/sport/2004/02/11/69.html

а вот такая
http://localhost/sitenews/news/sport/2004/02/11/69.html

возможно оно так и правельно, новости можно просмотреть по нескольким разделам если перейдём по такой ссылке
http://localhost/sitenews/news/

регулярка таким образом

RewriteRule ^[a-zA-Z]*/([a-zA-Z]*)?/?([0-9]{4})?/?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]*)?/{0,1}$ sitenews/news_list.php?category=$1&y=$2&m=$3&d=$4
RewriteRule ^[a-zA-Z]*/([a-zA-Z]*)?/?([0-9]{4})?/?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]*)?/?.html$ sitenews/news_review.php?category=$1&y=$2&m=$3&d=$4&nid=$5


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

всем спасибо за помощь
 
Сверху