jkm

Рейтинг
120
Регистрация
20.02.2014
bay_ebook:
Для многобайтовых нужен U

~is меняем на ~Uis

Только вот модификатор U (PCRE_UNGREEDY) вовсе не для этого. Он просто инвертирует жадность квантификаторов.

Тут нужен u (PCRE_UTF8). http://php.net/manual/ru/reference.pcre.pattern.modifiers.php

~is меняем на ~uis

Первый вариант не меняет домен

http://site.ru/? => http://site.ru/

http://www.site.ru/? => http://www.site.ru/

Второй вариант всегда отправляет на домен с www

http://site.ru/? => http://www.site.ru/

http://www.site.ru/? => http://www.site.ru/

Dram:
Настроил правило
RewriteRule ^forum/ / [L,R=301]

но оно не цепляет такие урлы http://www.сайт.ru/forum/блаблабла?start=138 в итоге такие урлы редиректятся на /?start=138

Как сделать чтобы ВСЕ урлы форума, независимо от знаков редиректились на главную?

Сбросить GET параметры при редиректе можно добавив знак вопроса


RewriteRule ^forum/ /? [L,R=301]

Если я правильно понял, то нужно вот так


RewriteCond %{THE_REQUEST} " /\?"
RewriteRule ^ /? [R=301,L]

Или так


RewriteCond %{THE_REQUEST} " /\?"
RewriteRule ^ http://www.site.ru/? [R=301,L]

Тогда даже не знаю, в чем может быть проблема.

Правило для ЧПУ, которое направляет запросы на /bitrix/urlrewrite.php


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

Порядок следования правил имеет значение.

Редиректы должны быть записаны раньше правила для ЧПУ.

По поводу ограничения в 150 строк. А если не запихивать весь список из сотни адресов в одно правило, а разделить его на несколько правил. По полсотни на каждый RewriteRule.

Чтобы правило работало только для адресов внутри одного раздела /pred/ нужно RewriteRule ^ заменить на RewriteRule ^pred/

Значит адреса имеют такой вид /pred/part1/part2/

В part1 разрешается gde-kupit-saiding, kupit-fasadnye-paneli, kupit-vodostoki, prochee.

В part2 разрешается centralnii-federalnii-okrug и какие-нибудь key2, key3, key4.

Если в part1 или part2 кроме разрешенного значения есть что-то лишнее, то сделать редирект на правильный адрес.


RewriteCond $1/$2 "(?x)(\
gde-kupit-saiding |\
kupit-fasadnye-paneli |\
kupit-vodostoki |\
prochee )\
[^/]* / .*? (\
centralnii-federalnii-okrug |\
key2 |\
key3 |\
key4 )"
RewriteCond "%1/%2 $1/$2" !^(\S+)\s\1$
RewriteRule ^pred/([^/]+)/([^/]+)/$ /pred/%1/%2/ [R=301,L]

Директива RewriteMap не работает в файле htaccess. Она может использоваться только в контексте server config, <VirtualHost>.

Так что для её примененения нужен доступ к файлам конфигурации веб-сервера (httpd.conf)

ant42:
прописал, редиректит все, кроме самого каталога:

site.ru/каталог1/ на site.ru/ - не редиректит

Достаточно заменить квантификатор + на *


RewriteRule ^(?:каталог1|каталог2|каталог3)(/.*) $1 [R=301,L]


RewriteEngine On

RewriteRule ^(?:каталог1|каталог2|каталог3)(/.+) $1 [R=301,L]

А если имя каталогов отличается только цифрами.


RewriteEngine On

RewriteRule ^каталог[1-3](/.+) $1 [R=301,L]


RewriteEngine On

RewriteRule ^каталог1(/.+) $1 [R=301,L]
RewriteRule ^каталог2(/.+) $1 [R=301,L]
RewriteRule ^каталог3(/.+) $1 [R=301,L]
Всего: 749