jkm

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

Символ ^ обозначает начало строки, а в вышележащей папке сравнение будет с строкой 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]

Попробуте добавить флаг NE (noescape)


RewriteCond %{QUERY_STRING} keywords=(.*)
RewriteRule advanced_search_result\.php /search/?q=%1 [R=301,L,NE]
Dubok:
Если точнее, почему не работает конструкция
RewriteRule ^catalog/([^/]*)/$ index.php?catalog=$1 [L]

Шаблон ^catalog/([^/]*)/$ нормально срабатывает для адреса /catalog/abc/. Может конфликт с другими правилами.

Dubok:
Ребята, помогите, пожалуйста! Как правильно написать в mod rewrite переадресацию с /?catalog=abc в /catalog/abc/

301 редирект можно сделать так


RewriteCond %{QUERY_STRING} =catalog=abc
RewriteRule ^$ /catalog/abc/? [R=301,L]

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


[^,]+\K,[^<]+

Адрес запрашиваете news/, а в шаблоне ^news$ слеш после news отсутствует. Поправьте RewriteRule так


RewriteRule ^news/$ news.php [L]
Futuris:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

Эти правила действуют ровно наоборот, перенаправляя на адреса без "/".

А предыдущие правила


RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [L]

ErrorDocument 404 /errors/404.html

нужно заменить на такие


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

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

ErrorDocument 404 /errors/404.html
Всего: 749