Закрыть доступ для переменной

12
A
На сайте с 20.08.2010
Offline
775
710

Подскажите, как можно закрыть GET-запросы к страницам через htaccess, которые содержат переменную, например: site.ru/site1/zuzu1234567 (окончание может быть разным)?

Нашел такой вариант, но он не работает:

RewriteCond %{QUERY_STRING} zuzu

RewriteRule ^.*$ - [F]

Есть еще такой вариант:

RewriteCond %{REQUEST_METHOD} GET

RewriteRule ^(.*/)?zuzu$ - [L,F]

Но тут фишка в том, что работает он только для site.ru/site1/zuzu, а для site.ru/site1/zuzu1234567 уже не работает.

J
На сайте с 20.02.2014
Offline
120
jkm
#1

Тогда так


RewriteCond %{REQUEST_METHOD} GET
RewriteRule ^(.*/)?zuzu - [L,F]
A
На сайте с 20.08.2010
Offline
775
#2

jkm, рукалицо. Много знаков подставлял, но не догадался этот убрать :) Благодарю. А можно, кстати, это же правило одновременно прописать для POST-запросов?

J
На сайте с 20.02.2014
Offline
120
jkm
#3

Убрать совсем RewriteCond %{REQUEST_METHOD} GET

или поменять RewriteCond %{REQUEST_METHOD} GET|POST

A
На сайте с 20.08.2010
Offline
775
#4
jkm:
Убрать совсем RewriteCond %{REQUEST_METHOD} GET
или поменять RewriteCond %{REQUEST_METHOD} GET|POST

Спасибо.

Возникла еще одна проблема. Если адрес имеет такой вид site.ru/site1/?zuzu1234567, то данное правило не работает, перебрасывает на главную. Почему?

J
На сайте с 20.02.2014
Offline
120
jkm
#5

http://site.ru/site1/?zuzu1234567

В RewriteRule попадает только site1/ т.е все до знака вопроса

GET переменные попадают в %{QUERY_STRING}


RewriteCond %{QUERY_STRING} zuzu [OR]
RewriteCond %{REQUEST_URI} zuzu
RewriteRule ^site1/ - [F,L]

или так


RewriteCond %{REQUEST_URI}?%{QUERY_STRING} zuzu
RewriteRule ^site1/ - [F,L]

В THE_REQUEST полная строка зароса "GET /site1/?zuzu1234567 HTTP/1.1"


RewriteCond %{THE_REQUEST} ^[A-Z]{3,7}\ /site1/\S*zuzu\S*\ HTTP
RewriteRule ^ - [F,L]
A
На сайте с 20.08.2010
Offline
775
#6

jkm, понял вас и уже успел погуглить. Схема интересная, только проблема в том, что она, как я понимаю, подразумевает использование одной страницы. Мне же нужно такое правило для любой страницы сайта. Вот в чем загвоздка.

J
На сайте с 20.02.2014
Offline
120
jkm
#7

Опишите подробнее. Вместо site1 может быть что угодно?

/test/?zuzu1234567

/test/zuzullllllll

/test/test2/zuzullllllll

A
На сайте с 20.08.2010
Offline
775
#8

Да, любая страница. Например, site.ru/boom/?zuzu1234567, site.ru/soup/?zuzu1843437df, site.ru/bank/?zuzu0974539test и далее в этом духе. По идее, при таких урлах должна отдаваться 403, но движок таков, что открывает ту же страницу, что и по основному адресу.

J
На сайте с 20.02.2014
Offline
120
jkm
#9


RewriteCond %{THE_REQUEST} ^[A-Z]{3,7}\ \S*([/?])zuzu\S*\ HTTP
RewriteRule ^ - [F,L]

Любой адрес где есть фрагмент /zuzu или ?zuzu

A
На сайте с 20.08.2010
Offline
775
#10

Нет, редиректит на главную, 403 не выдает. Тестирую такой штукой

<form method="GET" action="/?zuzu"><input type="submit"/></form>

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий