mod_rewrite переменная, которой может не быть. Как поступить?

VANHALEN

Новичок
Я очень очень очень прошу вашей помощи. Как то особенно не доводилось этим заниматься, а вот приспичило.

Понадёргал у других и переделал под себя, а у самого умишка не хватает правильно доделать. Может я и вообще не тем путём пошёл, но что сделано - то сделано. Доделывать надо аз ис, иначе - жопа.

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule ^admin/$ /admin/index.php [L]
# Собственно правила
RewriteRule ^([A-Za-z0-9-]+)/?$ ?page=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ ?section=$1&page=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ ?section=$1&page=$2&article=$3 [L]

Поясню..
- section - раздел (он может быть и не указан, тогда работает первая строка)
- page - либо алиас простой страницы, либо алиас категории
- article - алиас статьи, материала...

/akvariumy/statji/satya-pro-akvariumy-2 - вплоть до этого всё работает
Но вот незадача... Статьи разбиты на страницы, номер которых передаётся тоже в гете. Номера страницы может и не быть.. Но это не самое страшное. Выбирая статью, я сразу же могу передать номер страницы, чтобы оно было. Самое страшное то, что может не быть алиаса статьи. Тоесть человек зашёл в раздел, никакой статьи не выбрал, а сразу промотал к списку страниц и наэал на страницу 2 например.

Получилось /akvariumy/statji/2
Тупая машина ищет в разделе аквариумы, в подразделе статьи, стать с алиасом 2.

Возможно я даже подскажу решение (не знаю будет ли работать), но написать сам не смогу.
Если на третьем месте в гете стоит переменная, состоящая только из цифр, в колличестве (к примеру не больше трёх) -присвоить ей имя str, если нет, третьей считать article.

Может найдётся кто, кому это как два пальца об асфальт? в будущем торжественно клянусь учить регулярные выражения.. А пока..
 

fixxxer

К.О.
Партнер клуба
Выбрось это говно и сделай нормальный роутинг на уровне приложения.
 

VANHALEN

Новичок
RewriteRule ^([A-Za-z0-9-]+)/?$ ?page=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ ?section=$1&page=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([0-9]{1,3}+)/?$ ?section=$1&page=$2&str=$3 [L] // Добавлено.. Сам сообразил по шпаргалке на регулярки
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ ?section=$1&page=$2&article=$3 [L]

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

Может ещё у кого какие мысли будут, как красиво сделать, а то я ща кривыми ручищами своими как наляпаю :)
 

VANHALEN

Новичок
RewriteRule ^([A-Za-z0-9-]+)/?$ ?page=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ ?section=$1&page=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([0-9]{1,3}+)/?$ ?section=$1&page=$2&str=$3 [L]

RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([0-9]{1,3}+)/([A-Za-z0-9-]+)/?$ ?section=$1&page=$2&str=$3&article=$4 [L] // Ещё добавлено

RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ ?section=$1&page=$2&article=$3 [L]

В ИТОГЕ:
/akvariumy/statji/1/satya-pro-akvariumy-2 - работает
/akvariumy/statji/satya-pro-akvariumy-2 - тоже работает

Всё-таки значит сам справился.. Хотя не оставляет ощущение, что сделал я это не совсем крсиво. Но назревают следующие прблемы.. :)
 

fixxxer

К.О.
Партнер клуба
Да у тебя же все равно все на index.php идет, засунь ты эту логику в приложение.

Глаза же сломаешь с этими реврайтами. И мосг.
 

VANHALEN

Новичок
Да у тебя же все равно все на index.php идет, засунь ты эту логику в приложение.
Глаза же сломаешь с этими реврайтами. И мосг.
Да я сделаю конечно, просто не за 5 минут.. А мод реврайт уже готов и работает.. Я раньше и вообще не задумывался о том, чтобы строка запроса как-то прилично выглядела. Так, что уже прогресс :)

Да и мало-ли кто на форум ещё с таким вопросом зайдёт. Тут решение довольно простое и логика его понятна. Человек смошжет под себя переделать легко
 

Redjik

Джедай-мастер
сначала замени на заведомо неправильный switch case, самый быстрый костыль в твоем случае, после этого найди/придумай поизящнее решение
 

VANHALEN

Новичок
сначала замени на заведомо неправильный switch case, самый быстрый костыль в твоем случае, после этого найди/придумай поизящнее решение
Спасибо! Поковыряюсь на досуге
 
Сверху