Войти

Показать полную графическую версию : mod_rewrite etc.


Страниц : 1 2 3 [4] 5 6 7 8 9 10

Vlad Drakula
04-08-2006, 13:01
E-mail
ага... тогда один регексп будет в несколько десятков килобайт...

Sham
04-08-2006, 22:05
Vlad Drakulaнемного поменял структуру сайта и хочу чтобы со старых страниц шел автоматический редирект Хост чтоль поменял? Какие хоть измены то? А то поговорил сам с собой - и доволен... мне может тоже интересно... да и другим понятнее будет :) да простить меня хостер главно, чтоб юзер простил...

Vlad Drakula
04-08-2006, 22:16
Sham
главно, чтоб юзер простил...
для них и и сделано... у них просто происходит переадресация и все... они этого и не замечают...

Хост чтоль поменял? Какие хоть измены то? А то поговорил сам с собой - и доволен... мне может тоже интересно... да и другим понятнее будет
в се очень просто было 190 категорий я их раскидал по 6 разделам... вот и все линки поменялись... все это было сделано чтобы старые линки работали...

Sham
05-08-2006, 05:56
Vlad Drakula они этого и не замечаюткак же... у тебя же внешний редирект, тоже самое, что header("location:...."), слепой не заметит...в се очень просто было 190 категорий я их раскидал по 6 разделамдааа, объяснил... ты лучше объясни, для чего внешний редирект делаешь, ежели хост не менял? Давай колись :)

Vlad Drakula
05-08-2006, 09:43
Sham
иначе перекидывалось на другой домен... у охной площадки два домена...

E-mail
16-08-2006, 02:41
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

вот так вот(
и что тут можно сделать?..

Sham
16-08-2006, 05:11
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...

E-mail
16-08-2006, 20:38
если value одинаков для k9, k10, k11, шерстим по каждой папке
эм, папок k9, k10, k11 уже нету и надеюсь больше не понадобится создавать эту кучу молу?((((((

а если я вдруг не помню какие именно цифры у папок совпадают, я конечно могу посмотреть, но тогда придется сравнить кучу файлов старых урлов, и скорее всего я так и поступлю(( , но можно както это автоматизировать?.... я например ума не приложу как..

кстати говоря, там помимом page и value есть еще параметр &lang=en или вообще lang может отсутствовать.....

Sham
17-08-2006, 01:07
E-mailэм, папок k9, k10, k11 уже нетуа если чуточку внимательнее быть? Мы проверяем исходный URL регуляркой на наличие мертвых каталогов (к9-11), чтобы нужное правило сработало. А если от них ничего не зависит, чего тогда голову морочим?а если я вдруг не помню какие именно цифры у папок совпадаюта вот давай ты мне свои мозги на мыло скинь и я ими подумаю, потом обратно тебе пришлю... :drug:

Ты видимо приколоться надо мной решил... :haha: каждый раз что-то новое мне сообщаешь... а если я тебе решение предложу, где гарантия, что ты еще что-нить не забыл?

С какой стороны (в каком месте) QUERY_STRING может быть &lang=en? Есть ли какая-нить логика в цифрах, которые у тебя меняются (может формула какая)? Что ты именно хочешь автоматизировать? Если логики нет, то без кучи-малы никак не обойтись...

Ты сначала посчитай, сколько всего значений value у тебя меняется, столько и будет наборов правил, и с каждым значением тебе придется работать отдельно (где каталоги разные, или еще че-нить). И что, в каждой папке send.php был? Извини, моя фамилия не Холмс...

E-mail
17-08-2006, 08:22
Sham нет я не прикалываюсь, просто обнаружилось еще несколько папок)..

С какой стороны (в каком месте) QUERY_STRING может быть &lang=en?

по идее в самом конце, после page, либо вообще не быть

Sham
18-08-2006, 00:17
E-mail, ну я обновил свой пост с кодом... там подстановка %2 содержит все, что справа строки GET... да и с комментами я че-то начудил... :fool:, в общем разберешься... если чего не так, скажи...

E-mail
18-08-2006, 03:36
если чего не так, скажи...

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]


считайте это проверкой и считайте, что Вы ее прошли:)

с огромным уважением!

Sham
18-08-2006, 05:35
E-mailдве решотки в одной строчки да ладно... всю жисть так пишу, чем опасно то? Поделись инфой плз., может я чего не знаю... :) зачем разбивать на два файла так рациональнее, обычно в корне уже имеется htaccess, и заполнен под завязку. Поэтому ограничился только подменой мертвых каталогов на реальный. Еще заметь разницу в количестве кода :)дефис в переменной page после обработки модулем может пропасть вместе с последующей цифрой и доллар не будет учитываться (лишние 2 байта)а вот здесь подробнее, если можно :) куда пропадет дефиз? Какой доллар? Какие 2 байта? У меня там железно все... я пока не проверял, но обязательно это сделаю... Допускаю, что где-то доработать надо, но я на 99.9% уверен в своем коде.
лишняя проверка на директориюНе разобрался! У меня лишнего ничего не бывает :)
если одна из переменных не передается и вовсе редирект также не будет реализованкакая переменная? какой редирект? Мы там редирект не делаем, а URL переписываем, это разные вещи. Про переменную подробнее пожалста... :)считайте это проверкой и считайте, что Вы ее прошлиа это к чему? Прикол что-ли такой? :biggrin:

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

benya
15-09-2006, 11:37
Господа а Apache 1.3.7 не поддерживает комбинаций типа \w{2}? В смысле нормальных регулярных выражений?

Sham
16-09-2006, 03:54
benya, Только POSIX-регулярки...

E-mail
30-10-2006, 20:45
а как сделать редирект

с site.ru/index.html на site.ru

с site.ru/index.htmlfmfmfkrk на site.ru

и с site.ru/все_что_угодно.htmldfklj на site.ru/все_что_угодно.html

и с site.ru/все_что_угодно.htmdfklj на site.ru/все_что_угодно.htm

и желательно по компактней?:)

поможите..

Sham
30-10-2006, 22:37
E-mail
RewriteEngine On
RewriteRule ^(.*)index\.html?(fmfmfkrk)?$ http://site.ru/$1
RewriteRule ^(.+)\.(html?)dfklj$ $1.$2

E-mail
31-10-2006, 00:54
Sham что прости заменить?:)

эм, а с директориями третьего и т.д. уровня такжеработает?

site.ru/ttt/index.html на site.ru/ttt/ ?:)

и еще как быть с htm и как учесть чтобы запросы ? и # не терялись?:)...

Sham
31-10-2006, 03:49
E-mail обновил, должно работать.запросы ? и # не терялисьне теряются никуда :)что прости заменить?в первом правиле http://site.ru/$1 на $1index.php т.е. index.php это индексный файл в твоих директориях (или как у тебя там, не знаю). Это чтобы внешний редирект не делать, т.е. через header... (через юзера). А если так оставить, то если сработает первое правило, на браузер будет header посылаться (типа сайт переехал). Популярно объяснил? :) теперь проверяй.

E-mail
01-11-2006, 23:09
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