Mod_rewrite - нужна помощь

12
pikasso
На сайте с 27.01.2008
Offline
150
954

Здравствуйте. Сам я с mod_rewrite работаю только через разные генераторы, иногда сам кое где могу подправить, но плотно никогда его не учил. Тут возникла такая проблема, есть такой .htaccess:

RewriteEngine On 


#Раздел категории
RewriteRule ^([^/]*)/$ /category.php?category=$1 [L]

#Страница категории
RewriteRule ^([^/]*)/([^/]*)/$ /category.php?category=$1&page=$2 [L]

#Галлерея
RewriteRule ^gallery/([^/]*)/([^/]*)/$ /gallery.php?category=$1&gallery=$2 [L]

#Сама фотка
RewriteRule ^gallery/([^/]*)/([^/]*)/([^/]*)\.html$ /foto.php?category=$1&gallery=$2&foto=$3 [L]

Все работает отлично, например http://site.ru/news/ преобразует в category.php?category=news.

Но если писать без последнего слеша (http://site.ru/news) то правило уже не срабатывает и соответственно выдает 404-ю ошибку. Помогите пожалуйста переписать 1,2 и 3-е правило, чтобы работало также без последнего слеша, чтобы была видимость полноценной директории.

T
На сайте с 13.01.2009
Offline
50
#1


RewriteRule ^([^/]*)$ /category.php?category=$1 [L]
sowich
На сайте с 11.06.2007
Offline
26
#2

#Раздел категории

RewriteRule ^([^/]*)$ /category.php?category=$1 [L]

как вариант, но не очень хороший

#Раздел категории

RewriteRule ^news.*$ /category.php?category=$1 [L]

лучше имхо

p.s. уже опередили :)

Мой блог (http://sowich.info) Пишу скрипты на php, perl - велком!
pikasso
На сайте с 27.01.2008
Offline
150
#3

Попробовал этот вариант:

RewriteRule ^([^/]*)$ /category.php?category=$1 [L]

Выдает 500-ю ошибку, в логах апача пишет:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
sowich
На сайте с 11.06.2007
Offline
26
#4

pikasso ну попробуй мой второй. должен сработать

pikasso
На сайте с 27.01.2008
Offline
150
#5
sowich:
pikasso ну попробуй мой второй. должен сработать

Проблема в том, что у меня около 40-ка категорий, при этом планируется добавлять ещё, это получается нужно будет под каждую прописывать свое правило (а ещё постраничная навигация в разделах и сами галеры) ? Или я не правильно понял ваш вариант ?

sowich
На сайте с 11.06.2007
Offline
26
#6

Правильно понимаете, ну попробуйте вот так

#Раздел категории

RewriteRule ^([^/]*).*$ /category.php?category=$1 [L]

масло масляное конечно получается в паттерне :)

pikasso
На сайте с 27.01.2008
Offline
150
#7
sowich:
Правильно понимаете, ну попробуйте вот так
#Раздел категории
RewriteRule ^([^/]*).*$ /category.php?category=$1 [L]

масло масляное конечно получается в паттерне :)

Выдает все ту же ошибку:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

:(

alexspb
На сайте с 14.11.2005
Offline
187
#8

pikasso, в начале можно правило прописать общее - если не оканчивается на .html$ и нет / - сделать переадресацию (редирект) - вам же не нужны дубли?

А вообще странное ощущение такие htaccess вызывают - ведь проще все обрабатывать в PHP - т.е. один обработчик - там инструментов больше...

-
На сайте с 07.12.2005
Offline
97
-K-
#9
pikasso:
Здравствуйте. Сам я с mod_rewrite работаю только через разные генераторы, иногда сам кое где могу подправить, но плотно никогда его не учил. Тут возникла такая проблема, есть такой .htaccess:
RewriteEngine On 


#Раздел категории
RewriteRule ^([^/]*)/$ /category.php?category=$1 [L]

#Страница категории
RewriteRule ^([^/]*)/([^/]*)/$ /category.php?category=$1&page=$2 [L]

#Галлерея
RewriteRule ^gallery/([^/]*)/([^/]*)/$ /gallery.php?category=$1&gallery=$2 [L]

#Сама фотка
RewriteRule ^gallery/([^/]*)/([^/]*)/([^/]*)\.html$ /foto.php?category=$1&gallery=$2&foto=$3 [L]


Все работает отлично, например http://site.ru/news/ преобразует в category.php?category=news.
Но если писать без последнего слеша (http://site.ru/news) то правило уже не срабатывает и соответственно выдает 404-ю ошибку. Помогите пожалуйста переписать 1,2 и 3-е правило, чтобы работало также без последнего слеша, чтобы была видимость полноценной директории.

Так попробуйте

RewriteEngine On 


#Раздел категории
RewriteRule ^([^/]+)/?$ /category.php?category=$1 [L]

#Страница категории
RewriteRule ^([^/]+)/([^/]+)/?$ /category.php?category=$1&page=$2 [L]

#Галлерея
RewriteRule ^gallery/([^/]+)/([^/]+)/?$ /gallery.php?category=$1&gallery=$2 [L]

#Сама фотка
RewriteRule ^gallery/([^/]+)/([^/]+)/([^/]+)\.html$ /foto.php?category=$1&gallery=$2&foto=$3 [L]
pikasso
На сайте с 27.01.2008
Offline
150
#10
-K-:
Так попробуйте
PHP код:
RewriteEngine*On*

#Раздел*категории
RewriteRule*^([^/]+)/?$*/category.php?category=$1*[L]

#Страница*категории
RewriteRule*^([^/]+)/([^/]+)/?$*/category.php?category=$1&page=$2*[L]

#Галлерея
RewriteRule*^gallery/([^/]+)/([^/]+)/?$*/gallery.php?category=$1&gallery=$2*[L]

#Сама*фотка
RewriteRule*^gallery/([^/]+)/([^/]+)/([^/]+).html$*/foto.php?category=$1&gallery=$2&foto=$3*[L]*

К сожалению не работает, выдает все ту же нехорошую ошибку ;(

alexspb:
pikasso, в начале можно правило прописать общее - если не оканчивается на .html$ и нет / - сделать переадресацию (редирект) - вам же не нужны дубли?

Хм, нужно будет покопать в эту сторону... Спасибо.

alexspb:
А вообще странное ощущение такие htaccess вызывают - ведь проще все обрабатывать в PHP - т.е. один обработчик - там инструментов больше...

Да, вы правы, я на самом деле об этом тоже уже задумывался, лучше работать в сфере где ты лучше разбираешься. Насколько я понял алгоритм такой:

абсолютно все запросы редиректить скажем на index.php, а там уже при помощи parse_url все самому разбирать, я правильно себе представляю этот процесс ?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий