ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #191  
Старый 12.01.2009, 22:59
Аватар для .:EnoT:.
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме:
4832771

Репутация: 1916


По умолчанию

Базар свой прекращаем, бабки! Сидят тут пальцы гнут друг перед другом.
Вы оба не отличаетесь особым профессионализмом.
Так что переносим споры в пм, аську, куда угодно, а тему оставляем для регулярок)
 
Ответить с цитированием

  #192  
Старый 12.01.2009, 22:59
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

delete

Последний раз редактировалось Pashkela; 16.01.2009 в 18:31..
 
Ответить с цитированием

MultiViews и mod_rewrite — два вопроса
  #193  
Старый 16.01.2009, 18:18
Аватар для jabber
jabber
Новичок
Регистрация: 16.01.2009
Сообщений: 3
Провел на форуме:
2080

Репутация: 3
По умолчанию MultiViews и mod_rewrite — два вопроса

Постигая мудрость фреймворков, обнаружил невиданную ранее особенность:

URL вида
http://localhost/222/front .php
работал также при добавлении в конец слеша и любого мусора
http://localhost/222/front .php/dfojdofjso

В моём представлении такой URL мог соответствовать исключительно одной ситуации — наличии каталога с именем front.php и файла без расширения с именем dfojdofjso.

Озадаченный подобным казусом я полез на форум с вопросом «как такое может быть?». Мне сказали что дело в некой неизвестной мне тогда директиве MultiViews. Я обрадовался и закрыл тему, но поспешил. Оказалось, что эта директива всего лишь разрешает писать URL вида (1) вместо (2):

1) http://localhost/222/front
2) http://localhost/222/front .php

А ссылка вида
http://localhost/222/front .php/dfojdofjso
cпокойно работает при отключённом MultiViews!!! Вот что печатает этот скрипт:

REQUEST_URI => /222/front.php/dfdf
SCRIPT_NAME => /222/front.php
PHP_SELF => /222/front.php/dfdf
SCRIPT_FILENAME => z:/home/localhost/www/222/front.php

Я успокоил себя тем, что апач находит файл front.php и, рассудив, что это и есть его цель, выдаёт страницу. Т.е. поместил проблему в чёрный ящик.
Далее я создал .htaccess с таким содержимым:

RewriteEngine on
RewriteRule ^(.*)$ front\.php/dfojdofjso [L]


Т.е полагается переадресовывать любой запрос на front.php с мусором после слеша. Я ожидал один из двух вариантов:
1) сработает, как и при вводе URL http://localhost/222/front.php/dfojdofjso
2) не сработает и выдаст ошибку 404

Далее я проверил URL:
http://localhost/222/dfojdofjso.php
но результат оказался иным — произошла 500-я ошибка, а по логам — зацикливание.

Тут можно было бы обложится мануалами и разбираться в чём суть, но я продолжил эксперименты и получил во много раз более парадоксальную ситуацию. Изменённый .htaccess

RewriteEngine on
RewriteCond $1 !^front\.php
RewriteRule ^(.*)$ front\.php/sdfsdf [L]


И... это заработало. Заработало как в случае совпадения с front\.php, так и в случае несовпадения!

1) http://localhost/222/front.php
REQUEST_URI => /222/front.php
SCRIPT_NAME => /222/front.php
PHP_SELF => /222/front.php
SCRIPT_FILENAME => z:/home/localhost/www/222/front.php

2) http://localhost/222/dfojdofjso .php
REQUEST_URI => /222/dfojdofjso.php
SCRIPT_NAME => /222/front.php
PHP_SELF => /222/front.php/sdfsdf
SCRIPT_FILENAME => z:/home/localhost/www/222/front.php

Т.е добавление условия заставило нерабочее правило работать как в случае выполнения условия (1), так и в случае невыполнения условия (2), чего, по идее, быть не может. Вообще, я предпочитаю разбираться во всём самостоятельно, однако данная ситуация разорвала мой мозг поэтому приходится просить помощи снова. Общее представление как работает mod rewrite я имею, поэтому прошу не отсылать меня к абстрактной документации.

На всякий случай сформулирую вопросы:

1) Как же всё-таки URL вида
http://localhost/222/front.php/dfojdofjso
при наличии файла front.php работает при отключённом MultiViews?

2) Самый главный вопрос — почему правило

RewriteEngine on
RewriteRule ^(.*)$ front\.php/sdfsdf [L]


вызывает зацикливание независимо от URL, а правило

RewriteEngine on
RewriteCond $1 !^front\.php
RewriteRule ^(.*)$ front\.php/sdfsdf [L]


не вызывает зацикливания, опять таки независимо от URL?

Прошу прощения за длинный пост
 
Ответить с цитированием

  #194  
Старый 16.01.2009, 18:43
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

Цитата:
RewriteRule обратные_связи: Это обратные связи вида

$N

(0 <= N <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteRule (единственной, следующей сразу за текущим набором директив RewriteCond).

.........

Условие это шаблон условия, т.е., какое-либо регулярное выражение применяемое к текущему экземпляру СравниваемаяСтрока, т.е., СравниваемаяСтрока просматривается на поиск соответствия Условие.

Помните: Условие это perl совместимое регулярное выражение с некоторыми дополнениями:

Вы можете предварять строку шаблона префиксом '!' (восклицательный знак) для указания несоответствия шаблону.
http://htaccess.net.ru/doc/mod_rewrite/RewriteCond.php

т.е. у тебя типо получается если НЕ " ^front\.php", то

"^(.*)$" из строки "RewriteRule ^(.*)$ front\.php/sdfsdf [L]"

а то, что справа от "^(.*)$" - просто игнорируется, я так понял

ЗЫЖ Потому то, что справа от "^(.*)$" - ерунда какая-то
 
Ответить с цитированием

  #195  
Старый 16.01.2009, 19:26
Аватар для jabber
jabber
Новичок
Регистрация: 16.01.2009
Сообщений: 3
Провел на форуме:
2080

Репутация: 3
По умолчанию

Цитата:
а то, что справа от "^(.*)$" - просто игнорируется, я так понял
Думаю не игнорируется. Переменная PHP_SELF меняется в зависимости от выполнения, невыполнения условия.

Я, пожалуй, переформулирую вопрос:

Вот .htaccess фреймворка codeigniter

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index\.php/$1 [L]


Т.е. всё кидаем на фронт контроллер кроме картинок, цсс-стилей и т.д. а также кроме самого фронт контроллера.
Я не могу понять почему при удалении из RewriteCond составляющей "index\.php" происходит зацикливание на уровне Апача.

Для чего это всё нужно. Обычно CMS/CMF перенаправляют составляющие URL в GET-параметры, но некоторые устроены иначе — к контроллерам доступаешься так:
http://somehost.ru/index.php/somecontroller/action/param1/param2

а чтобы не писать index.php, а писать так:
http://somehost.ru/somecontroller/action/param1/param2

в .htaccess и добавляют такое правило.

Как оно распарсивается внутри, я пока не могу найти, там код мивина-стайл.

Последний раз редактировалось jabber; 16.01.2009 в 19:34..
 
Ответить с цитированием

  #196  
Старый 16.01.2009, 19:57
Аватар для Gifts
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

jabber Как бы все интуитивно понятно должно быть:

RewriteCond проверяет, чтобы первая подмаска не начиналась на index.php images или robots.txt. Если выполнено - вступает в силу RewriteRule - меняем http://someshit.ru/sdsadsadasd на http://someshit.ru/index.php/sdsadsadasd

Так как произошел внутренний редирект, то данные условия проверяются еще раз, но уже для нового пути. Вот и получается бесконечное добавление index.php.

Чтобы все было более явно - поставьте флаг для внешнего редиректа - R и посмотрите на урл в браузере после захода на страницу с RewriteRule и без оного

Код:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index\.php/$1 [L,R]
 
Ответить с цитированием

  #197  
Старый 16.01.2009, 20:10
Аватар для Fak1r
Fak1r
Познающий
Регистрация: 03.06.2007
Сообщений: 31
Провел на форуме:
163026

Репутация: 3
Отправить сообщение для Fak1r с помощью ICQ
По умолчанию

Есть несколько сторок текста:
class="blu"><b>DATA</b></a>
class="blu">DATA</a>
class="blu"><b>DATA</b></a>
class="blu">DATA</a>

Нужно составить регулярку которая вытаскивает данные между тегами, в данном случае DATA.
 
Ответить с цитированием

  #198  
Старый 16.01.2009, 20:13
Аватар для Gifts
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

Fak1r
PHP код:
preg_match_all('~class="blu">([^<])*</a>~i',$in,$out);
print_r($out); 
 
Ответить с цитированием

  #199  
Старый 16.01.2009, 20:55
Аватар для Fak1r
Fak1r
Познающий
Регистрация: 03.06.2007
Сообщений: 31
Провел на форуме:
163026

Репутация: 3
Отправить сообщение для Fak1r с помощью ICQ
По умолчанию

Gifts

Чет не работает, проверял ругулярку на http://www.regexpr.ru/
Возвращается только буква A, и только из двух сторочек в которых нет тэга <b>.
 
Ответить с цитированием

  #200  
Старый 16.01.2009, 21:00
Аватар для Gifts
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

Fak1r * внутрь скобок надо ^^
PHP код:
 preg_match_all('~class="blu">([\s\S]*?)</a>~i',$in,$out);
print_r($out); 
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi]/[Pascal] Задай вопрос, получи ответ Isis С/С++, C#, Delphi, .NET, Asm 6762 17.06.2010 21:23
[ *NIX ] Задай вопрос - получи ответ. Xszz *nix 1547 15.06.2010 15:41
[Lan] Задай вопрос - получи ответ! sedoy_xxx АнтиАдмин 133 31.03.2010 08:35
Всё о беспороводном соединении на кпк и смартфонах! Задай вопрос - получи ответ! ARMENIN Беспроводные технологии/WPAN/WLAN 2 02.11.2008 00:40
ЕсТь ВоПрос Guma Чаты 4 26.10.2005 21:48



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ