jkm

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

Если .htaccess в корне сайта.

RewriteEngine On


RewriteCond %{HTTP_REFERER} idilesom\.ru
RewriteRule ^pics/ / [R=301,L]

Если .htaccess в папке /pics/.

RewriteEngine On


RewriteCond %{HTTP_REFERER} idilesom\.ru
RewriteRule ^ / [R=301,L]

Это не сработет если перед Apache стоит Nginx, который самостоятельно раздаёт статические файлы и не передаёт такие запросы на Apache. Ну и когда браузер клиента реферер не передаёт тож работать не будет.

xoxol4uk22:
Помогите, пожалуйста. Пол дня убил, не умея я эти регулярные выражения понимать((
Простой редирект не работает. А вот этот не могу довести до ума:

RewriteRule ^index.php?id_article=1$ http:/site.ru/ [R=301]

В общем страницу site.ru/index.php?id_article=1 нужно на главную переадресовать...

Когда делаю вот так: ^index.php, то работает. А если добавляю окончание, то перестает. Думаю нужно символы кроме букв и цифр как-то экранировать, но не знаю как(( Пробовал их заменять точкой (она вроде универсальный символ), но тоже не работает

https://habr.com/company/sprinthost/blog/129560/

RewriteRule передается не ссылка, а только путь до запрошенного файла.

GET параметры находятся в %{QUERY_STRING}.

RewriteCond %{QUERY_STRING} ^id_article=1$

RewriteRule ^index\.php$ http://site.ru/? [R=301,L]

Ну и ставить выше остальных правил сразу после RewriteEngine On.


rewrite ^/page2\.html$ /page1.html;

Можно ставить прямо в блоке server.

SmileP:
RewriteRule (.*)\?back=1$

Строка с которой работает RewriteRule не содержит GET параметры.

https://habr.com/company/sprinthost/blog/129560/

Метасимвол ^ соответствует началу строки.

Dram:
Так тоже не сработало

Ну там же два разных режима работы: обычное строковое значение или регулярное выражение.

Т.е. если условие начинается с "~*", то всё что следом это регулярное выражение иначе это условие с обычным строковым значением.

map "$whitelist:$http_user_agent" $zakos_pod_good_bot {

default 0;
~*^0:.*yahoo 1;
~*^0:.*yandex 1;
~*^0:.*google 1;
~*^0:.*msnbot 1;
~*^0:.*bingbot 1;
~*^0:.*mail 1;
}


map $whitelist:$http_user_agent $zakos_pod_good_bot {
default 0;
~*^0:.*(yandexaccessibilitybot|yandexdirect|yandeximages|yahoo|mediapartners-google|yandexbot|googlebot|msnbot|bingbot|mail).* 1;
}

Перед регулярным выражением ставится символ “~”, если при сравнении следует учитывать регистр символов, то ставятся символы “~*”.

Что-то похожее было пару месяцев назад /ru/forum/917580

Если есть доступ править httpd.conf, то для списка страниц удобнее rewritemap

RewriteMap доступен в контексте <VirtualHost>, а не .htaccess

Если без RewriteMap, то как-то так:

RewriteCond expr "-R '1.1.1.1' || -R '2.2.2.2' || -R '3.3.3.3'"

RewriteCond "$1 \
page1 => new-page1 \
page2 => new-page2 \
" "^(\S+) .*? \1 => (\S+)"
RewriteRule ^(page1|page2)\.html$ /%2.html [L]
fliger:
Попробуйте так:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /https?://site\.ru(/.*)?\ HTTP
RewriteRule ^.*$ https://site\.ru%1 [R=301,L]

Просто нужно внимательно и не спеша читать условие задачи. Там нет // перед site.ru

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /https:/site\.ru(/.*)?\ HTTP

RewriteRule ^.*$ https://site\.ru%1 [R=301,L]

Или так

RewriteRule /site\.ru/(.*) https://site.ru/$1 [R=301,L]
Cursor:
Не работает.

А если это правило поставить в самое начало файла сразу после RewriteEngine On

Всего: 749