location ~ ^/assets/((?:[^/]+/)++.+)-400x400\.(png|jpg)$ {
try_files /image/data/$1.$2 /assets/$1.$2;
}
location
и rewrite
для сопоставления используют URI запроса в нормализованном виде, т.е. уже после декодирования текста, заданного в виде %XX.%20
будет преобразован в пробел и шаблон [%\w]
совпадений не найдёт. [L]
./fignya/chtotam
это существующий файл? Или он снова будет обработан index.php?$_SERVER['REQUEST_URI']
. Там останется исходный адрес /chtotam/. /
RewriteCond %{HTTP_HOST} ^(www\.)?site\.ru$ [NC]
RewriteRule ^prop/name/$ /prop/1234-nazvanie/ [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?site\.ru$ [NC]
RewriteRule ^prop/other-name/$ /prop/1234-drugoie-nazvanie/ [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?site\.es$ [NC]
RewriteRule ^prop/name/$ /prop/1234-nombre/ [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?site\.es$ [NC]
RewriteRule ^prop/other-name/$ /prop/1234-otro-nombre/ [R=301,L]
[R=301,L,NE]
[A-z]
нужно учитывать, что в этот интервал попадают не только буквы, но и другие символы.Z
идут символы [ \ ] ^ _ `
и только потом a
.\A
- всегда совпадает только с началом текста в отличие от метасимвола ^
, на который влияет модификатор m
.\G
- совпадает с позицией, в которой завершилось предыдущее совпадение. При первой итерации \G
совпадает только в начале строки, как и метасимвол \A
.\G(?!\A)
как раз исключает совпадение в начале строки и совпасть может только после предыдущего успешного совпадения.<p>
и далее с помощью \G(?!\A)
собираем всё что нужно.(?:[^\r\n<]+|<(?!/p>))*
- захватывает текст пока не встретит перевод строки или </p>
\K
- сброс начала совпадения. В документации про это написано в самом конце. \G
есть в книге "Регулярные выражения" автор Джеффри Фридл. s
метасимвол "точка" соответствует всем символам, включая перевод строк.$html = "<p> ... \n ... \r\n\r\n ... </p>";
$text = "lol";
echo preg_replace_callback(
'|<p>.*?</p>|si',
function ($m) use($text){
return preg_replace('|[\r\n]+|', $text, $m[0]);
},
$html
);
preg_replace(
'~(?:\G(?!\A)|<p>)(?:[^\r\n<]+|<(?!/p>))*\K[\r\n]+~i',
$text,
$html
);
-
и без https://regex101.com/r/QIp4uG/1
Тот шаблон можно упростить
^/assets/(.+)-400x400\.(png|jpg)$