jkm

Рейтинг
120
Регистрация
20.02.2014

Похоже nginx сам раздает статику и запрос к apache не доходит.

Можно попробовать перенести все страницы в папку и после правил для редиректа добавить такие правила


RewriteCond %{DOCUMENT_ROOT}/folder%{REQUEST_URI} -f
RewriteRule shtml$ /folder%{REQUEST_URI} [L]

Дело в том что директивы Redirect, RedirectMatch, RedirectPermanent относятся к mod_alias.

site.ru/path?query

mod_alias позволяет сравнивать с шаблоном поиска только /path, т.е. нету возможности проверить, что находится после знака вопроса.

Решить данную задачу можно средствами mod_rewrite.

Шаблон поиска RewriteRule сравнивается только с path, а GET параметры следует искать в %{QUERY_STRING}.

Чтобы при редиректе отбросить %{QUERY_STRING} нужно добавить в конце "?".


RewriteCond %{QUERY_STRING} =option=com_lite&pdoc=info_center&Itemid=53
RewriteRule ^index\.php$ http://newdomain.ru/about/personal.html? [R=301,L]

Ну и конечно ставить правила в самом верху сразу после строки RewriteEngine On.


RewriteCond %{THE_REQUEST} " /index\.php"
RewriteRule ^ http://site.ru/? [R=301,L]

Например так:


$str ='{"text_1":"2B","text_2":null,"text_3":"RT","text_4":null,"text_5":"VG","text_6":null,"text_7":false,"text_8":0,"text_8":["D1"]';
preg_match_all('~"text_[35]":"([^"]+)~', $str, $matches);
var_dump($matches);
Mish-ka:
Первый отгадавший, почему именно такой правильный ответ - приз 100 рублей.

Восклицательный знак там неспроста это ж факториал

luckydan:
Как переделать регулярку, чтобы в массив не попадали адреса src с таких тегов:
<iframe src="https://www.youtube.com/embed/CDVNvpoQWo8" height="315" width="420"></iframe>


preg_match_all('/<(?!iframe)[^>]+?src=["\'][^"\'>]+/i', $text, $data );

Примерно так


RewriteCond %{THE_REQUEST} " /\?video=(\S+)"
RewriteRule ^ img/gallery/test-folder/_notes/1/video.php?v=%1 [L]

Ставить выше правил для ЧПУ вроде таких RewriteRule .* index.php [L]

m0ntag:
удалить все кроме последовательностей, что начинаются с http и заканчиваются двойными кавычками " либо одинарными кавычками ' либо пробелом.

Подойдет ли такой вариант


[^h]++|http://[^\s"']++\K|h

https://regex101.com/r/qU2dV5/7

Примерно так


RewriteEngine On
Options +FollowSymLinks
RewriteBase /

RewriteCond %{THE_REQUEST} " /(news\.php|novosti[ ?])"
RewriteRule ^ novosti/ [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^novosti/$ news.php [L]

Конструкция (?!\[/url\]).)+ захватывает по одному символу, пока не встретит .

https://regex101.com/r/uG2yC2/1


$regex = '~\[url\](((?:(?!\[/url\]).){25})(?:(?!\[/url\]).){11,}(?<=(.{10})))\[/url\]~';
$text = preg_replace($regex, '<a href="\1">\2...\3</a>', $text);
Всего: 749