ты реально туп, приятель, еще бы мне тратить время на даунов всяческих Для обезьян: отдыхайте, молодой человек, нежно посасывая в уголке. ЗЫЖ Думай, потом пиши, дурачок
Ты в своём уме вообще? Одним флагом тут ничего не решается, так что ты снчала подумай, а потом печатай. А то складывается дурное впечатление о твоём профессионализме, дружок!
Базар свой прекращаем, бабки! Сидят тут пальцы гнут друг перед другом. Вы оба не отличаетесь особым профессионализмом. Так что переносим споры в пм, аську, куда угодно, а тему оставляем для регулярок)
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? Прошу прощения за длинный пост
http://htaccess.net.ru/doc/mod_rewrite/RewriteCond.php т.е. у тебя типо получается если НЕ " ^front\.php", то "^(.*)$" из строки "RewriteRule ^(.*)$ front\.php/sdfsdf [L]" а то, что справа от "^(.*)$" - просто игнорируется, я так понял ЗЫЖ Потому то, что справа от "^(.*)$" - ерунда какая-то
Думаю не игнорируется. Переменная 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 Как бы все интуитивно понятно должно быть: RewriteCond проверяет, чтобы первая подмаска не начиналась на index.php images или robots.txt. Если выполнено - вступает в силу RewriteRule - меняем http://someshit.ru/sdsadsadasd на http://someshit.ru/index.php/sdsadsadasd Так как произошел внутренний редирект, то данные условия проверяются еще раз, но уже для нового пути. Вот и получается бесконечное добавление index.php. Чтобы все было более явно - поставьте флаг для внешнего редиректа - R и посмотрите на урл в браузере после захода на страницу с RewriteRule и без оного Code: RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ index\.php/$1 [L,R]
Есть несколько сторок текста: class="blu"><b>DATA</b></a> class="blu">DATA</a> class="blu"><b>DATA</b></a> class="blu">DATA</a> Нужно составить регулярку которая вытаскивает данные между тегами, в данном случае DATA.
Gifts Чет не работает, проверял ругулярку на http://www.regexpr.ru/ Возвращается только буква A, и только из двух сторочек в которых нет тэга <b>.
Fak1r * внутрь скобок надо ^^ PHP: preg_match_all('~class="blu">([\s\S]*?)</a>~i',$in,$out); print_r($out);
Опять же preg_match_all возвращает: Code: Array ( [0] => Array ( [0] => class="blu"><b>DATA</b></a> [1] => class="blu">DATA</a> [2] => class="blu"><b>DATA</b></a> [3] => class="blu">DATA</a> ) [1] => Array ( [0] => <b>DATA</b> [1] => DATA [2] => <b>DATA</b> [3] => DATA ) )
PHP: $in = ' class="blu"><b>DATA</b></a> class="blu">DATA</a> class="blu"><b>DATA</b></a> class="blu">DATA</a>'; preg_match_all('/>(.*?)</i',$in,$out); echo '<pre>'; print_r($out['1']);
Здравствуйте! Есть строка в исходном коде страницы: <font color="#339966" size="+1">0.38 + Нужно парсить число, в данном случае 0.38. Делаю вот так: PHP: $html = '<font color="#339966" size="+1">0.38 +'; preg_match_all("/>(.*?) /i", $html, $out); echo '<pre>'; echo $out[0]; Ничего не получаю в ответ, подскажите как сделать правильно и где ошибка? Большое Спасибо!
Дан htaccess вот такого содержания: Code: RewriteEngine on RewriteBase / RewriteRule ^node/([0-9]+)([/]?)$ main.php?uri=$1 т.е. все ссылки вида http://my.site.ru/node/ЧИСЛО/ обрабатываются через main.php. Как его дополнить так, что бы все остальные страницы, отличные от node/([0-9]+)([/]?), перенаправляли браузер на главную страницу http://my.site.ru/ ? Пробовал вот так: Code: RewriteEngine on RewriteBase / RewriteRule ^node/([0-9]+)([/]?)$ main.php?uri=$1 [L] RewriteRule ^(.*)$ http://my.site.ru/ [L] но Firefox ругаеццо на то, что сервер бесконечно редиректит и не может ничего выдать, т.е. данный пример не катит... Как быть?
Architek86 Code: RewriteEngine on RewriteBase / RewriteRule ^node/([0-9]+)([/]?)$ main.php?uri=$1 [L] RewriteCond $1 !^main RewriteCond $1 !^node/([0-9]+)([/]?)$ RewriteRule ^(.*)$ http://my.site.ru/ [R,L]