chyngys
@chyngys
programmable hyperlinked pasta

Как реализовать могоуровневый ЧПУ по средствам .htaccess?

Добрый вечер. Зашел тупик юзая в гугле вопрос. Суть такова.
Есть ссылки вроде:
site.ru/?menu=[-a-zA-Z]&submenu=[-a-zA-Z]
site.ru/?menu=[-a-zA-Z]&submenu=[-a-zA-Z]&city=[-a-zA-Z]
Реализовал так:
RewriteRule ^([-a-zA-Z_]+)/([-a-zA-Z_]+)/([-a-zA-Z_]+)/?$ index.php?menu=$1&submenu=$2&city=$3 [QSA,L]
RewriteRule ^([-a-zA-Z_]+)/([-a-zA-Z_]+)/?$ index.php?menu=$1&submenu=$2 [QSA,L]

Вопрос, что делать когда в ссылке не будет параметра submenu в таком виде site.ru/?menu=[-a-zA-Z]&city=[-a-zA-Z]. Вот здесь будет путаница так как параметр city может представиться как submenu

Есть какие то предложения?
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 1
by25
@by25
Веб-разработчик
Обычно такой функционал не делается через .htaccess.
Все урлы передаются в фронт-контроллер (index.php, например), а он уже разруливает какой кантроллер/код вызывать.

Пример .htaccess для перенаправления всех урлов на index.php:
<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    RewriteRule .? %{ENV:BASE}/index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /index.php/
    </IfModule>
</IfModule>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы