jkm

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

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+/$

/path?query

В RewriteRule попадает только path. Все что после знака вопроса в %{QUERY_STRING}


RewriteCond %{QUERY_STRING} ^page=([0-9]+)
RewriteRule ^st.php$ http://site2.ru/dir/?page%1 [L,R=301]
Всего: 744