Показать полную графическую версию : mod_rewrite etc.
Страниц :
1
2
3
[
4]
5
6
7
8
9
10
Vlad Drakula
04-08-2006, 13:01
E-mail
ага... тогда один регексп будет в несколько десятков килобайт...
Vlad Drakulaнемного поменял структуру сайта и хочу чтобы со старых страниц шел автоматический редирект Хост чтоль поменял? Какие хоть измены то? А то поговорил сам с собой - и доволен... мне может тоже интересно... да и другим понятнее будет :) да простить меня хостер главно, чтоб юзер простил...
Vlad Drakula
04-08-2006, 22:16
Sham
главно, чтоб юзер простил...
для них и и сделано... у них просто происходит переадресация и все... они этого и не замечают...
Хост чтоль поменял? Какие хоть измены то? А то поговорил сам с собой - и доволен... мне может тоже интересно... да и другим понятнее будет
в се очень просто было 190 категорий я их раскидал по 6 разделам... вот и все линки поменялись... все это было сделано чтобы старые линки работали...
Vlad Drakula они этого и не замечаюткак же... у тебя же внешний редирект, тоже самое, что header("location:...."), слепой не заметит...в се очень просто было 190 категорий я их раскидал по 6 разделамдааа, объяснил... ты лучше объясни, для чего внешний редирект делаешь, ежели хост не менял? Давай колись :)
Vlad Drakula
05-08-2006, 09:43
Sham
иначе перекидывалось на другой домен... у охной площадки два домена...
Sham вообще то опять не так объяснил((
директорию k9 удалили, создали директорию k3,
но еще были директории k10 и k11 и теперь все это находится только в k3
загвоздка в том, что некоторые value у k10 такие же как и у k11 и k9 (
т.е. если раньеш была ссылка:
http://site.ru/k9/send.php?value=5&page=1-9
она должна стать:
http://site.ru/k3/send.php?value=97&page=1-9
а если ссылка:
http://site.ru/k10/send.php?value=5&page=1-9
она должна стать:
http://site.ru/k3/send.php?value=76&page=1-9
вот так вот(
и что тут можно сделать?..
E-mail## этот код до черты в .htaccess и кладем в корень (перед k3)
RewriteEngine On
## подмена каталога k9, k10, k11 на k3
RewriteRule ^(k9|k10|k11)(.*)$ k3$2 [L]
-------------------------------------------------------------------------
## а этот .htaccess с кодом ниже кладем в каталог k3
RewriteEngine On
## если value по-разному меняется для k9, k10, k11, сверяем по каждому...
## ----------НАЧАЛО value=5-----------
## если value=5 и каталог k9
RewriteCond %{THE_REQUEST} \/k9\/
RewriteCond %{QUERY_STRING} value\=5\&page\=([0-9\-\_]*)((\&.+)*)$
RewriteRule ^send\.php$ send.php?page=%1&value=97%2 [L]
## если value=5 и каталог k10
RewriteCond %{THE_REQUEST} \/k10\/
RewriteCond %{QUERY_STRING} value\=5\&page\=([0-9\-\_]*)((\&.+)*)$
RewriteRule ^send\.php$ send.php?page=%1&value=76%2 [L]
## если value=5 и каталог k11 (к примеру)
RewriteCond %{THE_REQUEST} \/k11\/
RewriteCond %{QUERY_STRING} value\=5\&page\=([0-9\-\_]*)((\&.+)*)$
RewriteRule ^send\.php$ send.php?page=%1&value=ТВОЕ_ЧИСЛО%2 [L]
## -----------КОНЕЦ value=5-----------
##
## Если value одинаково меняется для всех мертвых каталогов...
## например value=6...
## -----------НАЧАЛО value=6------------
RewriteCond %{QUERY_STRING} value\=6\&page\=([0-9\-\_]*)((\&.+)*)$
RewriteRule ^send\.php$ send.php?page=%1&value=ТВОЕ_ЧИСЛО%2 [L]
## -----------КОНЕЦ value=6--------------
## и все в таком же духе...Есть еще вариант с переменными окружения вместо THE_REQUEST, но так проще и надежнее IMHO...
если value одинаков для k9, k10, k11, шерстим по каждой папке
эм, папок k9, k10, k11 уже нету и надеюсь больше не понадобится создавать эту кучу молу?((((((
а если я вдруг не помню какие именно цифры у папок совпадают, я конечно могу посмотреть, но тогда придется сравнить кучу файлов старых урлов, и скорее всего я так и поступлю(( , но можно както это автоматизировать?.... я например ума не приложу как..
кстати говоря, там помимом page и value есть еще параметр &lang=en или вообще lang может отсутствовать.....
E-mailэм, папок k9, k10, k11 уже нетуа если чуточку внимательнее быть? Мы проверяем исходный URL регуляркой на наличие мертвых каталогов (к9-11), чтобы нужное правило сработало. А если от них ничего не зависит, чего тогда голову морочим?а если я вдруг не помню какие именно цифры у папок совпадаюта вот давай ты мне свои мозги на мыло скинь и я ими подумаю, потом обратно тебе пришлю... :drug:
Ты видимо приколоться надо мной решил... :haha: каждый раз что-то новое мне сообщаешь... а если я тебе решение предложу, где гарантия, что ты еще что-нить не забыл?
С какой стороны (в каком месте) QUERY_STRING может быть &lang=en? Есть ли какая-нить логика в цифрах, которые у тебя меняются (может формула какая)? Что ты именно хочешь автоматизировать? Если логики нет, то без кучи-малы никак не обойтись...
Ты сначала посчитай, сколько всего значений value у тебя меняется, столько и будет наборов правил, и с каждым значением тебе придется работать отдельно (где каталоги разные, или еще че-нить). И что, в каждой папке send.php был? Извини, моя фамилия не Холмс...
Sham нет я не прикалываюсь, просто обнаружилось еще несколько папок)..
С какой стороны (в каком месте) QUERY_STRING может быть &lang=en?
по идее в самом конце, после page, либо вообще не быть
E-mail, ну я обновил свой пост с кодом... там подстановка %2 содержит все, что справа строки GET... да и с комментами я че-то начудил... :fool:, в общем разберешься... если чего не так, скажи...
если чего не так, скажи...
Sham спасибо Вам большое дорогой Шам! Вы лутший, смотрите, всего несколько мелочей:
- две решотки в одной строчки для парсера конфига опасно серверу)
- зачем разбивать на два файла - для корня и рабочей директории?
- вот этот код вообще мне кажется излишен:
RewriteEngine On
RewriteRule ^(k9|k10|k11)(.*)$ k3$2 [L]
- а вот тут к сожелению то, что справо от урла не будет работать как переменная со значением:
RewriteCond %{QUERY_STRING} value\=5\&page\=([0-9\-\_]*)((\&.+)*)$
RewriteRule ^send\.php$ send.php?page=%1&value=97%2 [L]
кроме того, дефис в переменной page после обработки модулем может пропасть вместе с последующей цифрой и доллар не будет учитываться (лишние 2 байта)
- и еще, лишняя проверка на директорию:
RewriteCond %{THE_REQUEST} \/k9\/
- если одна из переменных не передается и вовсе редирект также не будет реализован
Я реализовал это вот в таком виде:
RewriteEngine On
#
#-------
#--- k9
#-------
RewriteCond %{QUERY_STRING} value\=1
RewriteCond %{QUERY_STRING} lang\=ru
RewriteCond %{QUERY_STRING} page\=([0-9]*)(\-|\_)([0-9]*)
RewriteRule ^k9/send.php$ k3/send.php\?value\=101\&page\=%1%2%3\&lang\=ru [L]
#
RewriteCond %{QUERY_STRING} value\=1
RewriteCond %{QUERY_STRING} page\=([0-9]*)(\-|\_)([0-9]*)
RewriteRule ^k9/send.php$ k3/send.php\?value\=101\&page\=%1%2%3 [L]
#
RewriteCond %{QUERY_STRING} value\=1
RewriteRule ^k9/send.php$ k3/send.php\?value\=101 [L]
#-------
#--- k10
#-------
RewriteCond %{QUERY_STRING} value\=1
RewriteCond %{QUERY_STRING} lang\=ru
RewriteCond %{QUERY_STRING} page\=([0-9]*)(\-|\_)([0-9]*)
RewriteRule ^k10/send.php$ k3/send.php\?value\=111\&page\=%1%2%3\&lang\=ru [L]
#
RewriteCond %{QUERY_STRING} value\=1
RewriteCond %{QUERY_STRING} page\=([0-9]*)(\-|\_)([0-9]*)
RewriteRule ^k10/send.php$ k3/send.php\?value\=111\&page\=%1%2%3 [L]
#
RewriteCond %{QUERY_STRING} value\=1
RewriteRule ^k10/send.php$ k3/send.php\?value\=111 [L]
считайте это проверкой и считайте, что Вы ее прошли:)
с огромным уважением!
E-mailдве решотки в одной строчки да ладно... всю жисть так пишу, чем опасно то? Поделись инфой плз., может я чего не знаю... :) зачем разбивать на два файла так рациональнее, обычно в корне уже имеется htaccess, и заполнен под завязку. Поэтому ограничился только подменой мертвых каталогов на реальный. Еще заметь разницу в количестве кода :)дефис в переменной page после обработки модулем может пропасть вместе с последующей цифрой и доллар не будет учитываться (лишние 2 байта)а вот здесь подробнее, если можно :) куда пропадет дефиз? Какой доллар? Какие 2 байта? У меня там железно все... я пока не проверял, но обязательно это сделаю... Допускаю, что где-то доработать надо, но я на 99.9% уверен в своем коде.
лишняя проверка на директориюНе разобрался! У меня лишнего ничего не бывает :)
если одна из переменных не передается и вовсе редирект также не будет реализованкакая переменная? какой редирект? Мы там редирект не делаем, а URL переписываем, это разные вещи. Про переменную подробнее пожалста... :)считайте это проверкой и считайте, что Вы ее прошлиа это к чему? Прикол что-ли такой? :biggrin:
Все-таки думаю, ты не до конца разобрался в моем коде... у меня гораздо компактнее и рациональнее. Но как говорится - хозяин-барин...
Господа а Apache 1.3.7 не поддерживает комбинаций типа \w{2}? В смысле нормальных регулярных выражений?
benya, Только POSIX-регулярки...
а как сделать редирект
с site.ru/index.html на site.ru
с site.ru/index.htmlfmfmfkrk на site.ru
и с site.ru/все_что_угодно.htmldfklj на site.ru/все_что_угодно.html
и с site.ru/все_что_угодно.htmdfklj на site.ru/все_что_угодно.htm
и желательно по компактней?:)
поможите..
E-mail
RewriteEngine On
RewriteRule ^(.*)index\.html?(fmfmfkrk)?$ http://site.ru/$1
RewriteRule ^(.+)\.(html?)dfklj$ $1.$2
Sham что прости заменить?:)
эм, а с директориями третьего и т.д. уровня такжеработает?
site.ru/ttt/index.html на site.ru/ttt/ ?:)
и еще как быть с htm и как учесть чтобы запросы ? и # не терялись?:)...
E-mail обновил, должно работать.запросы ? и # не терялисьне теряются никуда :)что прости заменить?в первом правиле http://site.ru/$1 на $1index.php т.е. index.php это индексный файл в твоих директориях (или как у тебя там, не знаю). Это чтобы внешний редирект не делать, т.е. через header... (через юзера). А если так оставить, то если сработает первое правило, на браузер будет header посылаться (типа сайт переехал). Популярно объяснил? :) теперь проверяй.
Sham запрос редиректил на документ рут)
другой вопрос как сделать редирект чтобы с запросов вида:
site.ru/go/home редиректило на site.ru/go/hotmepage.html
и с
site.ru/go/home/ редиректило на site.ru/go/hotmepage.html
?:)
при этом индекс по умолчанию index.php
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.