Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > Кипит моск (( mod_rewrite


Автор: MsJulia 9.8.2012, 23:34
RewriteEngine On
RewriteBase /

RewriteRule возраст/([0-9]+)-([0-9]+) love?years_up=$1&years_to=$2 [QSA,R]
RewriteRule Парни ?who=1 [QSA,R,L]

--------------------------------------------------------

отправляю туда:
http://пример.рф/love/Девушки/возраст/25-30/

по идее он первой строкой должен изменить url и вторая сработать не должна, но она срабатывает всёравно... на выходе 
http://пример.рф/?who=1&years_up=25&years_to=30

---------------------------------
по большому счёту оно мне и надо, но как оно работает понять не могу :(

" абстрагироваться от путей и ссылок и рассматривать то, с чем работает RewriteRule, как обычную строку. Эта строка передается от RewriteRule к RewriteRule, видоизменяясь, если какое-то из RewriteRule сработало.

В общем виде, если исключить сложности с использованием флагов (некоторые из которых мы рассмотрим ниже) и сложности с составлением регулярных выражений (которых мы почти не будем касаться в этой статье), RewriteRule работает ОЧЕНЬ просто.
1. Взяли строку.
2. Сравнили с регулярным выражением в первом аргументе.
3. Если есть совпадение — заменили всю строку на значение второго аргумента.
4. Передали строку следующему RewriteRule.
Вот, в общем, и все."

Если так, то второе правило сработать не должно было, ведь так?



======================================


"а сути не поняли" а как ещё можно понимать "Если есть совпадение — заменили всю строку на значение второго аргумента"

суть флага L мне отчасти понятна, здесь же я хотел схимичить обработку URL - несколькими идущими подряд правилами RewriteRule 

Для этого хотелось понять, что именно передаётся в СЛЕДУЮЩЕЕ RewriteRule после обработки первым без прекращения интерации флагом [L]

"Паутина" сказала, что преобразование идёт по цепочке, на деле есть то, что я описал...

Автор: MsJulia 10.8.2012, 00:26
скажите кто-нибудь, что вернёт такой реврайт, при запросе http://мойлог.рф/один/четыре

RewriteRule один два?три=3 [QSA,R]
RewriteRule четыре ?пять=5 [QSA,R]

И главное, почему он возвращает оба параметра, если везде пишут что URL изменяется от правила к правилу...

Автор: egetmanenko 30.8.2012, 15:19
Цитата(MsJulia @  10.8.2012,  00:26 Найти цитируемый пост)
скажите кто-нибудь, что вернёт такой реврайт, при запросе http://мойлог.рф/один/четыре

RewriteRule один два?три=3 [QSA,R]
RewriteRule четыре ?пять=5 [QSA,R]

И главное, почему он возвращает оба параметра, если везде пишут что URL изменяется от правила к правилу... 


Вернёт: http://мойлог.рф/два/четыре?три=3&пять=5

Потому что mod_rewrite не прекращает перезаписывать ваш урл сразу после первого совпадения. И даже после 1 прохода всех правил, mod_rewrite запустит второй проход. И только в том случае, если ни одно из правил не срабатывает, то mod_rewrite прекратит своё действие.

Автор: infinityC 1.10.2012, 22:47
Так и не понял, как создать новую тему, поэтому вопрос сюда.

Есть реальный урл http://site.ru/objects/doma/dom1, то есть страницы на сайте имеют такую трехуровневую адресацию.
Как этот http://site.ru/objects/dom1 запрос преобразовать в вышеприведенный?

Я делаю так, но неработает:

RewriteRule ^objects/(.*)$ /objects/gallery/$1 [L]

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