|
|
|
| Доброго времени суток!
У меня была такая ссылка http://имя сайта/?p=main, захотел чтоб вот такой была http://имя сайта/main без проблем всё сделал следующим кодом:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ?p=$1
Но теперь возникла необходимость во вторичном гет запросе, то есть:
Как из ссылки http://имя сайта/?p=main&id=5 сделать http://имя сайта/main/5
Наверно надо как то доработать выше указанный код, но вот как? | |
|
|
|
|
|
|
|
для: xxxZIKxxx
(09.05.2012 в 17:37)
| | В целом, такие задачи лучше всего решать перенаправлением запроса какому-либо одному php-скрипту, ибо завтра у вас появится ещё третий параметр, послезавтра - четвёртый, и т.д....
htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1
|
index.php:
<?php
$url = $_GET['url'] ? explode('/', $_GET['url']) : array();
print_r( $url );
/*
Array
(
[0] => foo
[1] => bar
[2] => baz
)
*/
|
| |
|
|
|
|
|
|
|
для: bishake
(10.05.2012 в 12:45)
| | Не не не.... Разбор скриптом это ж..... (жесть)
PHP медленен. Не стоит такие простые редиректы перекладывать на него.
> Как из ссылки http://имя сайта/?p=main&id=5 сделать http://имя сайта/main/5
Тут вы наверно имеете ввиду наоборот: ссылка (то что пишется в браузере) - это http://имя сайта/main/5, а http://имя сайта/?p=main&id=5 - это реальный обработчик. Верно?
Просто у вас RewriteRule ^(.*)$ ?p=$1 -это общее правило, под которое подходит любая ссылка, которая не является реальным файлом либо дирректорией. Все более частные редиректы нужно расположить ДО общего правила. Тогда общее сработает в том случае если не подойдет ни одно частное. Т.е. примерно так:
RewriteEngine on
RewriteBase /
RewriteRule ^([a-z]+)/(\d+)$ index.php?p=$1&id=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1
| P.S. index.php (выделено в коде жирным) я написал не случайно. В mod_rewrite индексные файлы лучше указывать явно. Это уменьшает количество преобразований и предотвращает нежелательные срабатывания других правил. | |
|
|
|
|
|
|
|
для: Sfinks
(10.05.2012 в 13:38)
| | > PHP медленен. Не стоит такие простые редиректы перекладывать на него.
Ни о каких редиректах и нет речи. В моём случае, запрос передаётся скрипту, в котором он обрабатывается по усмотрению разработчика - инклудятся нужные классы, функции, темлейты и т.д. Не вижу в вашем спопобе никакого преимущества, наоборот - при размещении rewrite-правил в htaccess мы теряем всю гибкость приложения. Как держать в голове все адреса? Что будет, если автор захочет поменять url'ы для страниц? В скольки местах придётся их переписать? | |
|
|
|
|
|
|
|
для: bishake
(10.05.2012 в 14:01)
| | Разница в том, что я ответил на поставленный топикстартером вопрос, а вы предложили решение, включающее в себя существенную переработку кода разбора структуры сайта. Абсолютно разные подходы. Поэтому я не собираюсь ничего доказывать. Автору предложили 2 варианта решения, он пусть сам выбирает что ему нужно.
___
P.S. Добавлю только, что вашим способом я одно время пользовался..... И даже сам его тут пару раз рекомендовал. Но когда на сайте количество разделов увеличивается, число строк пхп-кода отвечающих за разбор входного урл увеличивается в геометрической прогрессии. И понять в нем что-то куда сложнее чем в htaccess. Лично я от этого способа отказался очень быстро. Так что каждому решать за себя. | |
|
|
|
|
|
|
|
для: Sfinks
(10.05.2012 в 15:30)
| | Что же, не будем вступать в полемику. От себя добавлю, что при умелой организации кода и соблюдении принципов MVC, разбор url'ов скриптом может существенно упростить разработку сайта (топикстартеру возможно может быть полезным изучить устройство таковой системы в Symfony ) | |
|
|
|
|
|
|
|
для: xxxZIKxxx
(09.05.2012 в 17:37)
| | Интернет-сервис OF.ua специализируется на предоставлении услуг по регистрации имен для сайтов в приватных доменах OF.ua, OT.ua, PRI.ua, ViD.ua, WS.ua.
https://of.ua/ru/ | |
|
|
|