Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > как сделать редирект и убрать вложенность из url ч


Автор: listratov 11.7.2013, 09:20
У меня имеется 

site.ru/catalogue/gos/nalog/lk/
и мне нужно сделать, что бы ссылки имели вид

site.ru/gos/nalog/lk/
site.ru/gos/nalog/
site.ru/gos/
Т.е. выкинуть /catalogue/

Используя так 
RewriteRule ^gos/(.*?)/(.*?)$ catalogue/gos/$1/$2 [L]
и так 
RewriteRule ^(.*?)gos/(.*?)$ $1catalogue/gos?$2

работает, Но мне нужно, чтобы /gos/ подставлялась тоже маркером

типа ^(.*?)/(.*?)/(.*?)$ catalogue/$1/$2/$3 [L] <-  НО так не работает
Подскажите, как сделать?

Автор: Arantir 11.7.2013, 09:50
А просто 
Код

^(.*)$ catalogue/$1

чем не походит?

Добавлено через 8 минут и 43 секунды
Цитата(listratov @  11.7.2013,  08:20 Найти цитируемый пост)
типа ^(.*?)/(.*?)/(.*?)$ catalogue/$1/$2/$3 [L] <-  НО так не работает

Конечно не работает. Ведь в gos/ один слеш, а в регулярке - два.


Автор: listratov 11.7.2013, 10:51
При ^(.*)$ catalogue/$1 
Не открывается адрес site.ru/catalogue

C одним слешем тоже 
#RewriteRule ^(.*?)(.*?)/(.*?)$ $1catalogue/$2?$3
или
#RewriteRule ^(.*?)(.*?)/(.*?)$ $1catalogue/$2/$3
или
#RewriteRule ^(.*?)(.*?)/(.*?)$ catalogue/$1/$2/$3


Все не работает

Автор: Arantir 11.7.2013, 11:20
Цитата(listratov @  11.7.2013,  09:51 Найти цитируемый пост)
#RewriteRule ^(.*?)(.*?)/(.*?)$ $1catalogue/$2?$3

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


Вам только /gos/* перенаправлять нужно?
Тогда просто
Код

RewriteRule  ^gos/?(.*)$ catalogue/gos/$1
и любые ссылки вида gos/some/thing/ ведут на catalogue/gos/some/thing/

Автор: listratov 11.7.2013, 11:43
Знак комментария не опечатка, а просто знак комментария, в рабочем примере, конечно его нет. smile 
к сожалению мне не только gos/ нужно там таких как gos/ более 300 и расширяется... smile 

Вообще в идеале мне нужно вообще редирект с 

/catalog/podcatalog/podpodcatalog/f1 на /podcatalog/podpodcatalog/f1

/catalog/podcatalog/podpodcatalog/ на /podcatalog/podpodcatalog/

/catalog/podcatalog/ на /podcatalog/

/catalog/

и все, что после /catalog/ шло бы маркерами, т.к. там их мильон разных подкаталогов и каталогов

Автор: Arantir 11.7.2013, 12:03
Код

RewriteRule  ^(?:catalogue)?/?(.*)$ /catalogue/$1
все с /catalogue/ ведет само на себя, а всему остальному вперед добавляется /catalogue/.

Только вот тогда на сайте, по сути, будут работать только скрипты для /catalogue/*, так как все на него перенаправляется.
Проблема в том, что перенаправление идет задом наперед. То есть, если есть некий /something/, который не должен перенаправляться на /catalogue/something/, то иначе, как проверить все сотни вариантов, серверу не узнать, должен или не должен он туда перенаправляться.

Автор: listratov 11.7.2013, 14:24
Цитата(Arantir @ 11.7.2013,  10:03)
Код

RewriteRule  ^(?:catalogue)?/?(.*)$ /catalogue/$1
все с /catalogue/ ведет само на себя, а всему остальному вперед добавляется /catalogue/.

Только вот тогда на сайте, по сути, будут работать только скрипты для /catalogue/*, так как все на него перенаправляется.
Проблема в том, что перенаправление идет задом наперед. То есть, если есть некий /something/, который не должен перенаправляться на /catalogue/something/, то иначе, как проверить все сотни вариантов, серверу не узнать, должен или не должен он туда перенаправляться.

Эх... какой бы оптимальный вариант... что бы все работалo и редиректило...[R,L]....

Автор: Gromdron 13.7.2013, 10:57
У вас Битрикс ?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51de4ece6ccc19464b000002#findElement_E7045_51e108596ccc19802b002c33_0

Автор: listratov 16.7.2013, 08:29
Цитата(Gromdron @ 13.7.2013,  08:57)
У вас Битрикс ?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51de4ece6ccc19464b000002#findElement_E7045_51e108596ccc19802b002c33_0

umi cms

Автор: listratov 16.7.2013, 10:15
Грубо говоря сделал вот так

Код

RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !/catalogue/|/news/|/go/|/articles/|/events/|/stock/|/contacts/|/search/|/sitemap/|/ajax/|/webforms/|//
    RewriteRule ^(.*?)(.*?)/(.*)$  $1catalogue/$2?$3


Это работает для всех подкаталогов то есть /catalogue/one/two/three/

Но так же будет работать и для ссылок, которых нет в правиле !/catalogue/|/news/|/go/|....

Не добавлять же каждый раз в RewriteCond %{REQUEST_URI} новую ссылку...

Нужно что бы выполнялось только для /catalogue/one/two/three/, /catalogue/one/, /catalogue/one/two/ а для /catalogue/ не выполнялось
правило. и для  всех остальных, у которых нет в начале /catalogue/.. то же не выполнялось

А редирект делаю в контроллере

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)