можно ли упростить.

  • Автор темы Автор темы physh
  • Дата начала Дата начала

physh

поедатель запятых
можно ли упростить.

Я в mod_rewrite не бум-бум. Но благодаря ресурсам в Вашем ФАКе мне удалось кое что состряпать. Вопрос - правильно ли это и можно ли как-то все упростить, чтобы не пришлось скажем три раза одни и те же условия писать.

путь состоит из /раздел/страница/доп_инфо/, но если нет № страницы, то чтобы открывалась главная страница раздела.

Код:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^\/control\/(.*)$
RewriteRule ^([A-Za-z0-9_-]+)/([0-9]+)/([A-Za-z0-9_-]+)/?$ index.php?pg=$1.$2.$3 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^\/control\/(.*)$
RewriteRule ^([A-Za-z0-9_-]+)/([0-9]+)/?$ index.php?pg=$1.$2 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^\/control\/(.*)$
RewriteRule ^([A-Za-z0-9_-]+)/?$ index.php?pg=$1 [L]

Зараннее спасибо.
 
У меня:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !/favicon.ico$
RewriteCond %{REQUEST_FILENAME} !/install.php$
RewriteCond %{REQUEST_FILENAME} !/js/
RewriteCond %{REQUEST_FILENAME} !/images/
RewriteCond %{REQUEST_FILENAME} !/files/
RewriteRule .* main.php

А потом парсю REQUEST_URI уже в PHP.
 
RewriteCond %{REQUEST_FILENAME} !/favicon.ico$
RewriteCond %{REQUEST_FILENAME} !/install.php$
RewriteCond %{REQUEST_FILENAME} !/js/
RewriteCond %{REQUEST_FILENAME} !/images/
RewriteCond %{REQUEST_FILENAME} !/files/
Можно упростить до:

RewriteRule ^(favicon.ico|install.php|/js/|/images/|/files/).*$ - [L]

Только это правило нужно поставить ДО RewriteRule .* main.php
 
Igor aka TiGR
Упрощение подразумевает равнозначность, которой тут невидать :)
 
Я просто подал идею. И этим способом вполне реально упростить. Под любые потребности.

-~{}~ 27.08.06 23:02:

хотя, конечно, если используются и другие правила - нужно это немного учитывать. А если весь .htaccess был приведён выше - то вполне будет работать.
 
спасибо за идеи, но меня интересовло можно ли упростить так, чтобы 3 раза не повторять правила RewriteCond (для каждого из RewriteRule). Пускать все через один файл это тоже конечно хорошо, но сожалению в данном случае не подходит.
 
Можно запихнуть всё в один rewriteRule. Только слегка поменяется формат pg. Для разделов более высокого уровня будет "$1.." и "$1.$2.".
 
А так?
Код:
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !^\/control\/(.*)$
    RewriteRule ([A-Za-z0-9_-]+)(/?$|/([0-9]+)/(/?$|([A-Za-z0-9_-]+)/?$)) index.php?pg=$1.$3.$5 [L]
Отчего-то у меня не пошли "незахватывающие" скобки? Это фича mod_rewrite или кривизна моих рук?
 
Сверху