Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: mod_rewrite - странное поведение

Сообщения:  [1-10]   [11-12] 

 
 автор: MsJulia   (05.09.2012 в 11:34)   письмо автору
 
   для: MsJulia   (18.08.2012 в 23:15)
 

НАШЁЛ !!! Весьма случайно:

Примечание (http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html)

Никогда не забываёте что Шаблон применяется ко всему URL в конфигурационных файла сервера. Однако в конфигурационных файлах каталогов, префикс каталога (который всегда одинаков для конкретного каталога !), автоматически удаляется при соответствии шаблону и автоматически добавляется после завершения подстановки. Эта особенность, основа для многих видов преобразований, потому что без удаления префикса для родительского каталога тоже должно быть соответствие, что не всегда возможно.

  Ответить  
 
 автор: MsJulia   (18.08.2012 в 23:15)   письмо автору
 
   для: Sfinks   (18.08.2012 в 14:18)
 

Короче - пижнес полный...

> А например после того как встречается [R] цепь реврайтов тоже должна прерываться
[R] - запоминает необходимость редиректа, но НЕ останавливает работу реврайта

> У меня всегда тупо игнорируется и приходится менять правила местами
[L] - останавливает текущую интерацию, а новый url выхода будет обрабатываться снова

Что мне стало известно, ПОЛНОСТЬЮ url изменяется только последним правилом......
пижнес :(

  Ответить  
 
 автор: Sfinks   (18.08.2012 в 14:18)   письмо автору
 
   для: MsJulia   (17.08.2012 в 14:11)
 

Куда делась часть two - это и для меня загадка. Сразу ее отсутствие я просмотрел.
Постичь логику мод_реврайта досконально мне пока не далось.
А все потому (в этом же и ответы на все ваши вопросы), что все мануалы, которые я видел в сети - старьё, относящееся к апачу 1.3. А в апаче 2.х мод_реврайт ведет себя несколько по другому. Познавать тонкости приходится методом тыка.
Например я ни разу еще не видел, чтоб [L] вело себя так, как это документировано. У меня всегда тупо игнорируется и приходится менять правила местами, продумывать возможные подстановки, в общем прерывать цепочку замен просто исключая возможность совпадения с шаблоном.
А например после того как встречается [R] цепь реврайтов тоже должна прерываться и происходить внешний редирект. А если редирект происходит на тот же сайт и попадает на тот же .htaccess (как у вас), то все правила просмативаются с самого начала. У вас же что-то не понятное происходит.

Резюмирую:
Самое полное описание mod_rewrite, которое мне помогло хоть что-то в нем понять, вот: http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html
Также можете попробовать включить log мод_реврайта и поразбираться с ним. Но в него очень грустно смотреть, особенно если много правил.... Там такая куча строк и букаф странных =))))

  Ответить  
 
 автор: MsJulia   (17.08.2012 в 14:11)   письмо автору
 
   для: Sfinks   (17.08.2012 в 09:37)
 

Если вы хотите избежать этого
*Тут случай на самом деле тяжелый для понимания


Да нет же, понять хочу )))

Думаю, что после первой замены остается...

Нет, я проверял. Логика ваша - заменяет только то что нашёл по первому правилу, плюс ко всему - во второе правило приходит ПОЛНЫЙ путь к файлу на сервере от корня, а не URL !!!

То есть, в моём случае во второе правило пришло:
/var/www/site.com/two/four?three=3


Так как это вообще понимать вашу))) Во всех документах которые я успел прочитать, во всех статьях типа "Мод реврайт - просто о сложном..." и тд и даже в англоязычном доке который мне скидывал мой хостер - везде написано что URL изменяется полностью от правила к правилу.

Оказывается, полностью меняется только то, что найдено по регулярке. Так почему это нигде не описано?? И если описано, дайте пожалуйста ссыль на док, мне очень надо именно разобраться в последовательной работе правил. Поскольку назначение символов
 начала (^) и(или) конца ($) строки, а также флага [L] 

мне вполне известны.

Хочестя так, сказать узреть корень ;))

Sfinks, помогите разобраться. Пожалуйста :(

Получается, что до выхода из MOD_Rewrite url переводится в ПУТЬ к файлу если такой имеется на сервере, а уже на выходе из MOD-a, на последнем правиле, ПУТЬ превращается обратно в URL ?

В моём случае это было так

- site.com/one/four -
- /var/www/site.com/two/four?three=3 -
- site.com?five=5&three=3 -


И опять же. Если как вы говорите "Заменяется не вся ссылка, а то, что подходит под регулярное выражение." куда же делась часть "/two/" из URL если вторым правилом должно было замениться только часть регулярки "/four/".............?

  Ответить  
 
 автор: Sfinks   (17.08.2012 в 09:37)   письмо автору
 
   для: MsJulia   (15.08.2012 в 12:21)
 

Заменяется не вся ссылка, а то, что подходит под регулярное выражение.
Тут случай на самом деле тяжелый для понимания. Думаю, что после первой замены остается:
site.com/two/four?three=3
а после второй, то что вы написали. Можете проверить это убрав временно второе правило.

Если вы хотите избежать этого, то используйте символы начала (^) и(или) конца ($) строки:
RewriteRule one$ two?three=3 [QSA,R]
RewriteRule four$ ?five=5 [QSA,R]

  Ответить  
 
 автор: MsJulia   (15.08.2012 в 12:21)   письмо автору
 
   для: cheops   (14.08.2012 в 07:46)
 

RewriteRule one two?three=3 [QSA,R]
RewriteRule four ?five=5 [QSA,R]

На запрос - site.com/one/four - ВОЗВРАЩАЕТ - site.com?five=5&three=3
то есть оба параметра..

Если рассуждать логически и думать что URL изменяется от правила к правилу ПОЛНОСТЬЮ, то во второе правило должно войти site.com/two?three=3 и второе правило не должно сработать, но оно срабатывает... почему?

  Ответить  
 
 автор: cheops   (14.08.2012 в 07:46)   письмо автору
 
   для: MsJulia   (14.08.2012 в 00:01)
 

А в смысле оба параметра приходят? Какой вбиваете адрес в строку запроса и какие параметры при этом становятся доступными скрипту?

  Ответить  
 
 автор: MsJulia   (14.08.2012 в 00:01)   письмо автору
 
   для: cheops   (13.08.2012 в 07:35)
 

RewriteRule one two?three=3 [QSA,R]
RewriteRule four ?five=5 [QSA,R]

На запрос site.com/one/four

Почему приходят оба параметра, и что приходит на обработку во второе правило?
Везде пишут что преобразование идёт ПООЧЕРЁДНО с заменой всего URL от правила к правилу...

  Ответить  
 
 автор: cheops   (13.08.2012 в 07:35)   письмо автору
 
   для: MsJulia   (13.08.2012 в 02:29)
 

Да, в самом деле, не заметил. У вас в какой кодировке русский текст (не уверен, что mod_rewrite без дополнительного ковыряния вообще его поддерживает)?

  Ответить  
 
 автор: MsJulia   (13.08.2012 в 02:29)   письмо автору
 
   для: cheops   (12.08.2012 в 19:30)
 

это не пробелы в урл - это правая и левая части правила...

  Ответить  

Сообщения:  [1-10]   [11-12] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования