jkm

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

Конструкция (?!\[/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);

http://php.net/manual/ru/regexp.reference.back-references.php


$template = preg_replace("#\\[([a-z]+)\\](.*?)\\[\\/\\1\\]#ies", "", $template);


RewriteRule ^/logistic$ /dostavka-i-sborka-mebeli/$ [R=301,L]
RewriteRule ^/actions$ /action/$ [R=301,L]

Символ ^ в шаблоне обозначает позицию в начале текста. Строка, с которой работает RewriteRule не начинается с "/". Это подробно описано в статье http://habrahabr.ru/company/sprinthost/blog/129560/

RewriteRule Pattern Substitution [Flags]

В Substitution лишний символ $ приводит к целой серии редиректов.

Например:


RewriteRule ^composition/1(.*)$ /gostinye/$ [R=301,L]

/gostinye/$ => /gostinye/$/ => /404 => /404/

http://www.bertal.ru/index.php?a2017976/www.astron-mebel.ru/composition/1/4#h

Если планировалось делать редирект для адресов /catalog/composition/1, то достаточно убрать символ ^ из шаблона.


RewriteRule /composition/1 /gostinye/ [R=301,L]


RewriteCond %{THE_REQUEST} " /sanela/pissuary/ustrojstvo-davtomaticheskogo-smyva-pissuara/item/slp02k\?category_id=44 "
RewriteRule ^ /santehnika/aksessyary-dlia-vannyh-i-tyaleta/feny/item/slp02k-2?category_id=1480 [L,R=301]

Вставить после RewriteEngine On

Речь про то, что на сайте bentglass.ru правила

RewriteCond %{HTTP_HOST} ^(www\.)?bentglass\.ru

RewriteRule ^(.*)$ http://www.astron-mebel.ru/$1 [R=301,L]

перенести в самое начало.

Правила применяются в том порядке, в котором они перечислены. Перенесите правила для редиректа на самый верх сразу после RewriteEngine On

http://php.net/manual/ru/function.preg-replace.php

'замена' должна быть вторым параметром

Под page.php подразумевался скрипт контактной формы.

Если данные передаются методом POST на адрес page.php, то правило RewriteRule ^(.*[^/])$ /$1/ [R=301,L] выполнит редирект на адрес /page/ и все данные формы потеряются. Проверьте что форма отправляется сразу на адрес /page/.

Если нет возможности исправить скрипт, то можно добавить исключение для POST запросов


RewriteCond %{REQUEST_METHOD} !=POST [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]

Вместо


RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^(.+)/$ $1.html [L]

Так


RewriteCond $1.php ^page.php$ [or]
RewriteCond $1.html ^.+
RewriteCond %{DOCUMENT_ROOT}/%0 -f
RewriteRule ^(.+)/$ %0 [L]

Или так


RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^(.+)/$ $1.html [L]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+)/$ $1.php [L]


$label = "\*[a-z]+\*";
Всего: 750