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]+\*";
CFV\[1161170\]\[[^_[]+\[VALUE\]
CFV\[1161170\]\[(?!__UNIQUE__).*\[VALUE\]
Символ ^ обозначает начало строки, а в вышележащей папке сравнение будет с строкой Sub/2.jpg
Нужно просто убрать ^
RewriteEngine On RewriteCond %{QUERY_STRING} =itemid=185 RewriteRule ^old/index.php$ /new/file.html? [R=301,L]
В первом варианте redirect 301 это директива mod_alias, который не позволяет делать сравнение с GET параметрами.
Если адресов для редиректа много, то можно сделать один общий RewriteRule для всех.
/old/index.php?itemid=100 => /new/file1.php
/old/index.php?itemid=200 => /new/file2.php
/old/index.php?itemid=300 => /new/file3.php
RewriteCond %{QUERY_STRING} ^itemid=(\d+)$ RewriteCond %1;100=/new/file1.php ^(\d+);\1=(.+) [OR] RewriteCond %1;200=/new/file2.php ^(\d+);\1=(.+) [OR] RewriteCond %1;300=/new/file3.php ^(\d+);\1=(.+) RewriteRule ^old/index.php$ %2? [R=301,L]
Если apache версии 2.4 и подключены mod_headers, mod_setenvif, то можно ловить страницы с ошибкой 404 и добавлять заголовок Refresh с нужным адресом.
SetEnvIf Request_URI ^/(pigmenty)/\d+/$ CATEGORY_URL=/$1/ Header set Refresh "0; http://%{HTTP_HOST}e%{REDIRECT_CATEGORY_URL}e" "expr=%{REQUEST_STATUS} == 404 && -n reqenv('REDIRECT_CATEGORY_URL')"
Указать несколько категорий в шаблоне можно так
^/(pigmenty|cat1|cat2|cat3)/\d+/$
<url>\s*<loc>[^<]+login.+?</url>\s*
https://regex101.com/r/gF3aD9/1
/path?query
В RewriteRule попадает только path. Все что после знака вопроса в %{QUERY_STRING}
RewriteCond %{QUERY_STRING} ^page=([0-9]+)RewriteRule ^st.php$ http://site2.ru/dir/?page%1 [L,R=301]