jkm

Рейтинг
120
Регистрация
20.02.2014
gruz_:
Заменить на: \L<$1>

Так это же фича Perl, а в редакторы обычно встраивают библиотеку PCRE и там такой фичи нету.

'[umka:
;13666839']RewriteEngine on
RewriteCond %{QUERY_STRING} ^up=
RewriteRule ^$ [R=404,L]

После шаблона в RewriteRule ожидается адрес, так что апач будет искать файл /[R=404,L] и флаг [L] останавливающий обработку апач здесь не увидит и если после этого правила есть RewriteRule .* index.php [L] то 404 ошибки не будет. В таких случаях на месте адреса достаточно дефиса.

RewriteEngine on

RewriteCond %{QUERY_STRING} ^up=
RewriteRule ^$ - [R=404,L]

В Notepad++ под эту задачу нужный макрос стандартными средствами записать не удалось, так что придется вручную добавлять в файле shortcuts.xml между тегами <Macros> и </Macros>. Добавлять при закрытом Notepad++.


<Macro name="lowercase" Ctrl="no" Alt="no" Shift="no" Key="0">
<Action type="2" message="0" wParam="43046" lParam="0" sParam="" />
<Action type="2" message="0" wParam="42017" lParam="0" sParam="" />
</Macro>

Очистить результаты поиска.

Вызвать меню поиска в файлах.

Указать нужную папку и фильтр.

Шаблон поиска используем тот же href="\K[^"]+.

Смотрим на количество найденных результатов и указываем это число в меню многократного запуска макроса.

После сохранить все.

Или проверять переменную %{THE_REQUEST} "GET /?l=blablabla HTTP/1.1"


RewriteCond %{THE_REQUEST} \ /\?l=([^&\ ]+)
RewriteRule ^ /papka/%1.html? [R=301,L]

Такое вполне решается макросами.

Меню Макросы -> Начало записи. Потом вызываем меню поиска и для поиска атрибутов href в шаблон поиска вбиваем такую регулярку

href="\K[^"]+

Жмём искать далее и в тексте будет выделен найденый текст. Кликаем правой кнопкой по нему и в контекстном меню выбираем строчные. После жмём меню Макросы -> Остановка записи и многократный запуск.

Любопытно, а если с помощью mod_headers провернуть такую штуку


RequestHeader set Host site.ru

Правила mod_rewrite будут по-прежнему видеть какой домен запрашивал юзер и делать редирект если нужно, а вот php скрипт всегда будет получать в заголовках домен установленный директивой RequestHeader.

Так это правило и так работает для всех категорий.

Если имелось в виду не один товар из всех категорий, а все товары из всех категорий, то нужен шаблон ^catalog/[^/]+/[^/]+/$.

Адреса начинающиеся на /catalog/element/ так же попадают под этот шаблон и для них нужно исключение иначе будет бесконечная переадресация.


RewriteCond %{REQUEST_URI} !^/catalog/element/
RewriteRule ^(catalog)/[^/]+/([^/]+)/$ http://pozvonimarket.ru/$1/element/$2/? [R=301,L]


RewriteRule ^(catalog)/(?!element/)[^/]+/([^/]+)/$ http://pozvonimarket.ru/$1/element/$2/? [R=301,L]

Исключение для /catalog/element/ можно сделать дополнительным RewriteCond


RewriteCond %{REQUEST_URI} !^/catalog/element/
RewriteRule ^(catalog)/[^/]+/(shpingalet_dvernoy_palladium_09)/$ http://pozvonimarket.ru/$1/element/$2/? [R=301,L]

Или так


RewriteRule ^(catalog)/(?!element/)[^/]+/(shpingalet_dvernoy_palladium_09)/$ http://pozvonimarket.ru/$1/element/$2/? [R=301,L]

Ставить в самый верх сразу после RewriteEngine On

Если я правильно понял, то ищем цифру 7 или 8, за которой следуют десять цифр, которые могут быть разделены тире или пробелом.

Это описывается регулярным выражением [78](?:[- ]?\d){10}

Solmyr:
если ссылка которую нужно заменить, находится между двумя тегами <a>, то она не будет заменена, например во фрагменте текста:


word <a href="http://site1.ru">site1.ru</a> word http://site3.ru word word <a href="http://site2.ru">site2.ru</a>


Фрагмент текста http://site3.ru не будет заменен на ссылку.

Это последствия применения <\/a>.* которая захватит максимально любых символов до конца строки.

Можно поправить выкинув из шаблона все лишнее оставив только (\s)(http:\/\/[\w\.\-\_%]*)

Но не сработает если ссылка в начале текста или обернута в другой тег <span>http://site3.ru</span>.

Решить можно так:


$html = preg_replace('~
\G
(
(?:
[^h<]+
|
<a.*?</a>
|
(?!(?2)).
)*+
)
(http://[-._%/\w]*)~ix',
'\1<a href="\2">\2</a>',
$html
);

Всего: 749