jkm

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

.htaccess в папке folder.


RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/folder/$1.php -f
RewriteRule ^(.+)/$ $1.php [L]
yet_warm:
Стопудово, первая трезвая мысль - без гита нефик и дергаться, ну не в топике ж тут pull requestы кидать?

Ага, прям тут и накидаем.


string pattern = @"(value=....)";
Regex regex = new Regex(pattern);

// Достигаем того же результата что и в предыдущем примере,
// используя метод Regex.Matches() возвращающий MatchCollection
foreach (Match match in regex.Matches(input))
{
Console.WriteLine(match.Groups[1].Value);
}

Сократить этот кусок до одной строки:


Console.WriteLine(Regex.Match(input, @"value=""(\d+)").Groups[1].Value);
ТП2:
Redirect 301 /index.php?option=com_content&view=article&id=6&Itemid=17 http://www.ivsatin.ru/tekhnologiya.html

Тут используется шаблон с GET параметрами и директива Redirect, которая относится к mod_dir.

Проблема в том, что mod_dir сравнивает с шаблоном только /path, а не весь /path?query.

Средствами mod_rewrite это можно сделать так


RewriteEngine On

RewriteCond %{THE_REQUEST} " /index\.php\?option=com_content&view=article&id=6&Itemid=17 "
RewriteRule ^ http://www.ivsatin.ru/tekhnologiya.html? [R=301,L]

или так


RewriteEngine On

RewriteCond %{QUERY_STRING} =option=com_content&view=article&id=6&Itemid=17
RewriteRule ^index\.php$ http://www.ivsatin.ru/tekhnologiya.html? [R=301,L]

Ну и ставить это выше остальных RewriteCond и RewriteRule.


RewriteCond %{THE_REQUEST} " /question\.php\?page=(\d+)"
RewriteRule ^question\.php$ /question-%1.html? [R=301,L]

RewriteRule ^question-([0-9]+)\.html$ /question.php?page=$1 [L]

Или так


RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^page=(\d+)
RewriteRule ^question\.php$ /question-%1.html? [R=301,L]

RewriteRule ^question-([0-9]+)\.html$ /question.php?page=$1 [L]

RewriteEngine On

RewriteRule ^([^.]+)$ /$1.html [L,R=301]

rupixel, для исключения index.htm можно добавить в шаблон негативную опережающую проверку (?!index\.htm).


RedirectMatch 301 ^/(?!index\.htm).+\.htm$ $0l

RewriteRule ^(?!index\.htm).+\.htm$ /$0l [R=301,L]

Или добавить дополнительный RewriteCond.


RewriteCond %{REQUEST_URI} !^/index.htm
RewriteRule ^.+\.htm$ /$0l [R=301,L]
Эдуардoff:
но не работает
Redirect 301 /старая%20ссылка/ httр://мой.сайт/новая-ссылка/
как решается такая проблема?


Redirect 301 "/старая ссылка/" httр://мой.сайт/новая-ссылка/

Или


RewriteEngine On
RewriteRule "^старая ссылка/" httр://мой.сайт/новая-ссылка/ [R=301,L]
rupixel:
Нужно редиректить все только урлы с сайта которые заканчиваться на .htm и редиректить на тот же урл, только на .html
Как правильно написать ?


RedirectMatch 301 ^.+\.htm$ $0l

Или


RewriteEngine On
RewriteRule ^.+\.htm$ /$0l [R=301,L]

Если использовать флаг QSA, то пренаправление будет с ?a=b на ?metka=0&a=b


RewriteCond %{QUERY_STRING} !(^|&)metka=
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !^/category/
RewriteRule ^.*$ /$0?metka=0 [R=301,L,QSA]

Если нужно с ?a=b на ?a=b&metka=0


RewriteCond %{QUERY_STRING} !(^|&)metka=
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !^/category/
RewriteCond %{QUERY_STRING}&metka=0 &*(.+)
RewriteRule ^.*$ /$0?%1 [R=301,L]

$text = '<div id="block" class="block">Текст "содержащий" кавычки.</div>';

$text = preg_replace('/<[a-z][^>]*>(*SKIP)(?!)| "/i', ' «', $text);
$text = preg_replace('/<[a-z][^>]*>(*SKIP)(?!)|"[ .,;:]/i', '» ', $text);

На первый взгляд всё работает http://sandbox.onlinephpfunctions.com/code/35b8eac340c696d9dbccf358d095e72bea47dbd4

Нужен пример текста, где не работает.

Еще хотелось бы узнать какая там версия библиотеки для работы с регулярными выражениями и какая версия PHP.


echo "PHP ", PHP_VERSION, ", PCRE ", PCRE_VERSION, "\n";

Сразу после preg_replace можно добавить вызов preg_last_error() и посмотреть номер ошибки.


var_dump( preg_last_error() );

Если текст большой возможно превышение лимитов pcre.backtrack_limit или pcre.recursion_limit.

---------- Добавлено 29.10.2016 в 10:16 ----------

Вот ещё вариант


$text = preg_replace("/<h2.*?<\/h2>(*SKIP)(?!)|(?<!\p{L})\Q{$value['faq_menu']}\E(?!\p{L})/uis", '<a href="/faq/'.$value['faq_url'].'/">\0</a>', $text);
Всего: 749