Подскажите как решить задачку с подменой URL и где лучше в nginx или htaccess ?Нужно вместо страницы
http://site.ru/page?filter=&fd13=105
переадресовать пользователя на страницу:
http://site.ru/page/subpage
Но показать ему при этом содержимое из:
http://site.ru/page?filter=&fd13=105&code=m
Если в общем случае, то это будет звучать как:
1) если URL заканчивается параметром "?filter=&fd13=105", то надо в адресной строке заменить этот параметр на "/subpage"
2) и далее следом если URL заканчивается на /subpage, то надо показать данные c URL что вызывается, но в котором заменено "/subpage" на "?filter=&fd13=105&code=m"Ну и чтобы при этом зацикливания не произошло, хотя вроде и не должно...
Если просто напрямую вызовут URL заканчивающийся на /subpage, то естественно тоже чтобы 2-ое правило отработало.
> Подскажите как решить задачку с подменой URL и где лучше в nginx
> или htaccess ?
> Нужно вместо страницы
> http://site.ru/page?filter=&fd13=105
> переадресовать пользователя на страницу:
> http://site.ru/page/subpage
> Но показать ему при этом содержимое из:
> http://site.ru/page?filter=&fd13=105&code=mи какой в этом, мать его, сакральный смысл?
> Если в общем случае, то это будет звучать как:
> 1) если URL заканчивается параметром "?filter=&fd13=105", то надо в адресной строке заменить
> этот параметр на "/subpage"
> 2) и далее следом если URL заканчивается на /subpage, то надо показать
> данные c URL что вызывается, но в котором заменено "/subpage" на
> "?filter=&fd13=105&code=m"сначала накидают быдлокод, а потом устраивают вечеринки с бубнами ...
1) отдавать нормальные линки не пробовали?
2) писать нормальный код не пробовали?
3) маны лицезреть не пробовали?
4) решить задачу разбивкой на две: замена №1 СРАЗУ на №3, и замена №2 на №3
5) остальное в манах реврайта мой юный падаван ...
это как я понял - что вы там подразумевали я хз ...> Ну и чтобы при этом зацикливания не произошло, хотя вроде и не
> должно...чтобы произошло зацикливание №1 и №3 должны быть идентичные, хотя когда мозга нет и руки из жо... то все возможно!
> Если просто напрямую вызовут URL заканчивающийся на /subpage, то естественно тоже чтобы
> 2-ое правило отработало.
Сакральный смысл простой:Пользователь на сайте выбирает опции фильтра: мальчик или девочка
В результате генериться URL с параметрами например: http://site.ru/page?filter=&fd13=105А теперь надо чтобы вместо этой хрени на экране у него сформировался в адресной строке ЧПУ http://site.ru/page/subpage , но данные были получены с этой хрени с еще одним доп параметром, т.е. отсюда http://site.ru/page?filter=&fd13=105&code=m
Все это для того чтобы реализовать вот такой же вариант (при этом ничего не меняя в коде, а только пошаманив в htaccess, если это конечно возможно):
http://www.kinderly.ru/collection/krossovki
http://www.kinderly.ru/collection/krossovki/dlya-devochki
http://www.kinderly.ru/collection/krossovki/dlya-malchikaПредполагалась где то вот такая конструкция:
RewriteCond %{QUERY_STRING} ^filter=%26fd13%3D105$
RewriteRule ^(.*)$ $1/dlya_malchikov? [L,R=301]
RewriteRule ^/dlya_malchikov$ ?filter=%26fd13%3D105$&language_code=nl [L,NE]Т.е. если в параметрах видим "filter=%26fd13%3D105", то делаем редирект на /dlya_malchikov, а потом если видим в адресе /dlya_malchikov, то показываем данные из ?filter=%26fd13%3D105$&code=nl
Первая часть с редиректом отрабатывает, а вот со второй проблема, на 404 ошибку кидает все время, хотя если ручками вбить такой URL (?filter=%26fd13%3D105$&code=nl), то он открывается ...
> Сакральный смысл простой:
> Пользователь на сайте выбирает опции фильтра: мальчик или девочка
> В результате генериться URL с параметрами например: http://site.ru/page?filter=&fd13=105
> А теперь надо чтобы вместо этой хрени на экране у него сформировался
> в адресной строке ЧПУ http://site.ru/page/subpage , но данные были получены с
> этой хрени с еще одним доп параметром, т.е. отсюда http://site.ru/page?filter=&fd13=105&code=mвы пытаетесь синтезировать некий алгоритм, смысла я так и не понял - понял что надо заменить через жопу урлы, но _ЗАЧЕМ_ так и не понял.
> Все это для того чтобы реализовать вот такой же вариант (при этом
> ничего не меняя в коде, а только пошаманив в htaccess, если
> это конечно возможно):т.е. научить код реагировать "правильно" на "корявые" ссылки при этом не меняя кода? оригинально!
> http://www.kinderly.ru/collection/krossovki
> http://www.kinderly.ru/collection/krossovki/dlya-devochki
> http://www.kinderly.ru/collection/krossovki/dlya-malchika
> Предполагалась где то вот такая конструкция:
> RewriteCond %{QUERY_STRING} ^filter=%26fd13%3D105$
> RewriteRule ^(.*)$ $1/dlya_malchikov? [L,R=301]
> RewriteRule ^/dlya_malchikov$ ?filter=%26fd13%3D105$&language_code=nl [L,NE]
> Т.е. если в параметрах видим "filter=%26fd13%3D105", то делаем редирект на /dlya_malchikov,
> а потом если видим в адресе /dlya_malchikov, то показываем данные из
> ?filter=%26fd13%3D105$&code=nlа почему, блиать, сразу не переписать первое на третье??????
> Первая часть с редиректом отрабатывает, а вот со второй проблема, на 404
> ошибку кидает все время, хотя если ручками вбить такой URL (?filter=%26fd13%3D105$&code=nl),
> то он открывается ...
> а почему, блиать, сразу не переписать первое на третье??????блиать, потому что в адресной строке надо чтобы было второе, а на экране чтобы выводилось то что находится по третьей ссылке
А переписывать чужой говнокод не всегда возможно.
Вместо туевой кучи бесцельных комментов не по теме, лучше бы сказали как так сделать...
>> а почему, блиать, сразу не переписать первое на третье??????
> блиать, потому что в адресной строке надо чтобы было второе, а на
> экране чтобы выводилось то что находится по третьей ссылке1) иногда лучше молчать, и казаться умнее, чем заговорить и развеять все сомнения (С) народная мудрость
2) феерично
3) то что браузер запросил, то он в адресной строке и пишет (GET)
4) для этого есть POST, сессии и т.д.> А переписывать чужой говнокод не всегда возможно.
fix: не всегда умеют
> Вместо туевой кучи бесцельных комментов не по теме, лучше бы сказали как
> так сделать...мои коменты были весьма таки по теме, я просто пытался понять "зачем", но вы подтвердили мои самые худшие сомнения ...
> мои коменты были весьма таки по теме, я просто пытался понять "зачем",
> но вы подтвердили мои самые худшие сомнения ...Я может не очень понимаю как работает htaccess, но разве такое не возможно ?
Браузер запрашивает URL1 с параметрами
Апач по соответствующей директиве в htaccess делает внешний редирект на другую адресную строку без параметров и фактически запускает новую сессию с новым URL2
Получив запрос по новому URL2 Апач по другой директиве в htaccess не меняя URL2 (внутренний редирект) выдает данные с третьего URL3Или так оно не может работать ?
>> мои коменты были весьма таки по теме, я просто пытался понять "зачем",
>> но вы подтвердили мои самые худшие сомнения ...
> Я может не очень понимаю как работает htaccess, но разве такое не
> возможно ?
> Браузер запрашивает URL1 с параметрами
> Апач по соответствующей директиве в htaccess делает внешний редирект на другую адресную
> строку без параметров и фактически запускает новую сессию с новым URL2
> Получив запрос по новому URL2 Апач по другой директиве в htaccess не
> меняя URL2 (внутренний редирект) выдает данные с третьего URL3
> Или так оно не может работать ?урл /dlya_malchikov - он же один только может быть да?
а урлов ?filter=%26fd13%3D105$&code=nl - дофига ?как по вашему сервер опознает какую страницу из этих дофига он должен показать если все клиенты пришлют ему только "/dlya_malchikov"?
попробуйте поискать тут:
http://www.yandex.ru/search/?text=ЧПУ%20сайт&clid=9582&lr=213http://blogiseo.ru/blogovedenie/kak-sdelat-chpu-dlya-sajta.html
> Вы не понимаете.
> вид урла рисует БРАУЗЕР.
> Вы, правкой htaccess, НИКАК не сможете поменять то что рисует браузер.
> А браузер вам нарисует ту ссылку которая в коде странички.
> На сайте который вы привели - включен ЧПУ.Чета я действительно уже ничего не понимаю
А что тогда описано в бесконечных FAQ в сети с заголовками: "Управляем URL с помощью .htaccess и mod_rewrite" ?Я у себя на сайте без проблем же меняю что рисует браузер через .htaccess
Запрашиваю в адресной строке браузера
http://site.ru/kedyi-krossovki?filter=%26fd13%3D105В результате после редиректа в браузере получаю:
http://site.ru/kedyi-krossovki/dlya_malchikovДелается это вот этим двумя командами в htaccess:
RewriteCond %{QUERY_STRING} ^filter=%26fd13%3D105$
RewriteRule ^(.*)$ $1/dlya_malchikov? [L,R=301]Это же обычный 301 редирект с одного URL на другой.
Ну можно его в nginx еще сделать же...
Но никакого URL http://site.ru/kedyi-krossovki/dlya_malchikov у меня естественно на сайте нет и поэтому надо дальше проброс сделать через внутренний какой то скрытый редирект что тоже в куче форумов с заголовками "Внутренний редирект без смены URL"
Все прочел, но что то не склеивается :)
>[оверквотинг удален]
> Делается это вот этим двумя командами в htaccess:
> RewriteCond %{QUERY_STRING} ^filter=%26fd13%3D105$
> RewriteRule ^(.*)$ $1/dlya_malchikov? [L,R=301]
> Это же обычный 301 редирект с одного URL на другой.
> Ну можно его в nginx еще сделать же...
> Но никакого URL http://site.ru/kedyi-krossovki/dlya_malchikov у меня естественно на
> сайте нет и поэтому надо дальше проброс сделать через внутренний какой
> то скрытый редирект что тоже в куче форумов с заголовками "Внутренний
> редирект без смены URL"
> Все прочел, но что то не склеивается :)Описание:
Предположим что мы недавно переименовали страницу bar.html в foo.html и сейчас хотим для обратной совместимости сделать доступным и старый URL. В действительности мы хотим чтобы пользователи использующие старый URL даже не узнали что страницы были переименованы.
Решение:
Мы перенаправим старый URL на новый через внутренний редирект путем следующих директив:RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo\.html$ bar.html
> урл /dlya_malchikov - он же один только может быть да?
> а урлов ?filter=%26fd13%3D105$&code=nl - дофига ?
> как по вашему сервер опознает какую страницу из этих дофига он должен
> показать если все клиенты пришлют ему только "/dlya_malchikov"?Да нет, сервер просто должен заменить в любом урл "/dlya_malchikov" на урл "?filter=%26fd13%3D105$&code=nl"
Точнее не так !!!
Урл сервер должен оставить в данном случае без изменений, то есть как было "/dlya_malchikov" так и должно остаться "/dlya_malchikov"
А вот данные сервер должен подгрузить со страницы с "?filter=%26fd13%3D105$&code=nl"Это возможно ? Или это только в PHP, javascript, ajax и т.д. сделать можно ?
Вот если я Ваш пример правильно понял выше. Пользователь наберет старый url bar.html
и увидит по нему информацию которая на сервера на самом то деле лежит по url foo.html
Причем он даже и не узнает от том что bar.html уже нет.Вот и мне надо чтобы пользователь набрал в адресной строке /dlya_malchikov, а увидел информацию со страницы ?filter=%26fd13%3D105$&code=nl (но в адресной строке у него осталось /dlya_malchikov)
>> как по вашему сервер опознает какую страницу из этих дофига он должен
>> показать если все клиенты пришлют ему только "/dlya_malchikov"?
> Да нет, сервер просто должен заменить
> Точнее не так !!!
> Урл сервер должен оставить в данном случае без изменений,Вы уверены, что уже не пора начинать спрашивать _прокси_, переписывающий и URL-и запросов, и выдаваемый в ответ HTML? Хинт: "Неиспраавленное" приложение отдаёт html-и со ссылками внутри на _непереписанные_ URL-и [своих соседних страниц~].
И, да, в общем случае эта задача не разрешима: генерация url-ей js-ами; url-и внутри... ну, скажем, флэшей. Да мало ли ни с чем не совместимой пакости (sip, rtsp?) проскакивает в этом вашем http.
> Это возможно ? Или это только в PHP, javascript, ajax и т.д.
> сделать можно ?! Н Е В О З М О Ж Н О !
> Вот если я Ваш пример правильно понял выше. Пользователь наберет старый url
> bar.html
> и увидит по нему информацию которая на сервера на самом то деле
> лежит по url foo.html
> Причем он даже и не узнает от том что bar.html уже нет.
> Вот и мне надо чтобы пользователь набрал в адресной строке /dlya_malchikov, а
> увидел информацию со страницы ?filter=%26fd13%3D105$&code=nl (но в адресной строке у него
> осталось /dlya_malchikov)еще раз для очень одаренных:
1) не хотите светить переменные - POST, сессии и т.д.
2) это GET метод, детка!
3) принцип http следующий: а) браузер просил урл у сервера б) уже на сервере происходить подмена урла если включен реврайт, до непостредственной обработки в) подмененный урл реврайт подсовывается веб серверу г) сервер отвечает на переписанный урл е) все конец
и тут два важных момента: первый - при каждом новом урле итерация повторится (после редиректа), и данные итерации НЕЗАВИСИМЫЕ, вот чтобы их "увязать" есть переменные в урле (GET), или не в урле (POST), и второй момент - ни браузер ни сервер не знают что урл переписан!
> ! Н Е В О З М О Ж Н О !можно использовать
ссылу типа /dlya_malchikov/305/607/xxx/ и т.т.
т.е. закодить значиния вариэйблоф в строку - ПОДРУГОМУ НЕВОЗМОЖНО, БЛИАТЬ!
>> ! Н Е В О З М О Ж Н О !А вот так будет ?
.htaccessRewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
index.php$handle = fopen("http://www.webaliser.org".$_SERVER['REQUEST_URI'], "r");
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
афтар, больше не пиши сюда ....
в этом круговороте редиректов :) я вижу только вот такой смысл реализации:1- если URI = /page?filter=&fd13=105
2- замени/редирект что переехал URI на /page/subpage и обратись
3- URI /page/subpage проксирует запрос на URI /temp (/temp дублирующий код, для того чтобы цикла не было)
4- URI /temp выдает код что и код URI /page?filter=&fd13=105&code=m (по сути два разных файла скрипта)