jkm

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

Правило с редиректом нужно поставить выше остальных внутренних перенаправлений.

^ - обозначает начало строки.

$ - обозначает конец строки.

RewriteCond %{REMOTE_ADDR} ^85\.26\.

Тут проверяется, что ip начинается на 85.26. и остальная часть может быть любой, так что $ тут не нужен.

Для 85.26.165.*, 85.26.232-235.*


RewriteCond %{REMOTE_ADDR} ^85\.26\.165\. [OR]
RewriteCond %{REMOTE_ADDR} ^85\.26\.23[2-5]\.
RewriteCond %{REQUEST_URI} /kak-vybrat-cvet-rozy\.html
RewriteRule .* - [F]

А если надо заблокировать все IP, начинающиеся с 85.26.*.*


RewriteCond %{REMOTE_ADDR} ^85\.26\.
RewriteCond %{REQUEST_URI} /kak-vybrat-cvet-rozy\.html
RewriteRule .* - [F]

В переменной %{REQUEST_URI} адрес начинается с /.

RewriteCond %{REMOTE_ADDR} ^85\.26\.232\.185$

RewriteCond %{REQUEST_URI} ^/stranica-primer\.html

RewriteRule ^.*$ - [F]

Можно чуть сократить.

RewriteCond %{REMOTE_ADDR} ^85\.26\.232\.185$

RewriteRule ^stranica-primer\.html$ - [F]

Используя флаг [OR] можно добавить ещё правил с ip.


RewriteCond %{REMOTE_ADDR} ^11\.22\.22\.22$ [OR]
RewriteCond %{REMOTE_ADDR} ^33\.22\.22\.22$ [OR]
RewriteCond %{REMOTE_ADDR} ^85\.26\.232\.185$
RewriteRule ^stranica-primer\.html$ - [F]


RewriteCond %{REMOTE_ADDR} =11.22.22.22 [OR]
RewriteCond %{REMOTE_ADDR} =33.22.22.22 [OR]
RewriteCond %{REMOTE_ADDR} =85.26.232.185
RewriteRule ^stranica-primer\.html$ - [F]

Ну и ставить блокировку выше остальных правил.

Там дело не в RewriteBase, а в том, что mod_rewrite запускает обработку запроса снова и снова, до тех пор, пока он не перестанет меняться.

Запрос stati/page.php будет преобразован в stati/stati.php?url=page и цикл обработки запустится заново.

Адрес stati/stati.php совпадает с шаблоном ^stati/(.*).php/?$ и будет преобразован в stati/stati.php?url=stati

Это продробно описано в статье http://habrahabr.ru/company/sprinthost/blog/129560/

Нужно исключить повторную обработку этим правилом.

Есть несколько способов.


RewriteRule ^stati/(?!stati\.php)(.*)\.php/?$ stati/stati.php?url=$1


RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^stati/(.*).php/?$ stati/stati.php?url=$1


RewriteRule ^stati/stati.php - [L]
RewriteRule ^stati/(.*).php/?$ stati/stati.php?url=$1
=MaximaN=:
Добрый вечер.

Помогите, пожалуйста, настроить редирект со страниц вида:
http://site.ru/?location=katalog/dir/file-1
http://site.ru/index.php?location=katalog/dir/file-1
http://site.ru/katalog/dir?
http://site.ru/?

на
http://site.ru/katalog/dir/file-1
http://site.ru/katalog/dir
http://site.ru

С уважением.


RewriteCond %{QUERY_STRING} location=([^&]+)
RewriteRule ^(index\.php)?$ /%1? [R=301,L]

RewriteCond %{THE_REQUEST} " /([^?]*)\? "
RewriteRule ^ /%1? [R=301,L]
Zdorova:

Redirect 301 ?index=newt&newt=28 http://moldfootball.com/?index=konf


RewriteEngine On

RewriteCond %{QUERY_STRING} index=newt&newt=28
RewriteRule ^ http://moldfootball.com/?index=konf [R=301,L]
Sizam4ik:
было index.php?name=Files&op=view_file&lid=111
стало index.php?name=files&op=view&id=111


RewriteCond %{THE_REQUEST} " /index\.php\?name=Files&(op=view)_file&l(id=\d+)"
RewriteRule ^ /index.php?name=files&%1&%2 [R=301,L]


location /forums/ {
rewrite ^/forums/ipb\.html /forums/index.php;
rewrite ^/forums/index\.html? /forums/index.php;
rewrite ^/forums/main\.html /forums/index.php?act=idx;
rewrite ^/forums/topic([0-9]+)\.html$ /forums/index.php?showtopic=$1;
rewrite ^/forums/topic([0-9]+)s([0-9]+)\.html$ /forums/index.php?showtopic=$1&st=$2;
rewrite ^/forums/forum([0-9]+)\.html$ /forums/index.php?showforum=$1;
rewrite ^/forums/cat([0-9]+)\.html$ /forums/index.php?act=SC&c=$1;
rewrite ^/forums/ptopic([0-9]+)\.html$ /forums/index.php?act=Print&client=printer&f=1&t=$1;
rewrite ^/forums/user([0-9]+)\.html$ /forums/index.php?showuser=$1;

location ~ \.php$ {
# А тут уже ставим свой fastcgi_pass
}
}

Модуль mod_dir с настройками по умолчанию делает редирект и добавляет завершающий слеш для существующих каталогов.

Nginx принимает подключения по обоим протоколам, а проксирует на Apache по http.

В результате получается что редирект, который создаёт mod_dir ведёт на http.

Это можно отключить в .htaccess


DirectorySlash Off


RewriteCond %{QUERY_STRING} =t=190&PAGEN_1=10 [OR]
RewriteCond %{QUERY_STRING} =PAGEN_1=10&t=190
RewriteRule ^rezultaty/$ /$0?PAGEN_1=10 [R=301,L]

Или


RewriteCond %{QUERY_STRING} (?:^|&)t=190(?:&|$)
RewriteCond %{QUERY_STRING} (?:^|&)(PAGEN_1=10)(?:&|$)
RewriteRule ^rezultaty/$ /$0?%1 [R=301,L]
vaf76:
Подредактировал движок сайта, убрав из материала id материала, в результате чего все ссылки типа
http://site.ru/shkafy-kupe/107-shkaf-kupe-radiusnyj.html
http://site.ru/prikhozhie/127-prikhozhaya-tatyana.html
и т.д. (всего несколько тысяч подобных страниц)

теперь приобрели вид
http://site.ru/shkafy-kupe/shkaf-kupe-radiusnyj.html
http://site.ru/prikhozhie/prikhozhaya-tatyana.html

RewriteRule ^([^/]+/)\d+-([^/]+\.html)$ /$1$2 [R=301,L]
Всего: 749