Как правильно настроить .htaccess?

Добрый день. Мне нужно правильно настроить htaccess, чтобы не было доступа к несуществующим ссылкам и чтобы редиректило и отдавало ответ 404.
Сейчас на сайте есть ссылки такого вида:
/money.php?get=vesti-fm&target=form&frm=homescreen&target=form&frm=homescreen&target=form&frm=homescreen
/money.php?get=russk%20%D0%BF%D0%BE%D1%80%D0%BD%D0%BE%20%D1%81%D1%83%D0%BF%D0%B5%D1%80oe-radio


По таким запросам страниц не существует, но отображаются страницы, которые существуют /money.php?get=vesti-fm и /money.php?get=russkoe-radio.

Обрабатывается через php переменная get таким образом:
$get = preg_replace("/[^a-zA-Z0-9-_]/",'', addslashes($_GET['get']));

Как мне отдавать код ошибки 404, если пользователь переходит по подобным страницам:
/money.php?get=vesti-fm&target=form&frm=homescreen&target=form&frm=homescreen&target=form&frm=homescreen
/money.php?get=russk%20%D0%BF%D0%BE%D1%80%D0%BD%D0%BE%20%D1%81%D1%83%D0%BF%D0%B5%D1%80oe-radio

Пробовал делать так:
# Проверка наличия символов & или % в QUERY_STRING и отправка статуса 404
RewriteCond %{QUERY_STRING} (\%|\&)
RewriteRule ^ - [R=404,L]

или так:
RewriteCond %{QUERY_STRING} ^([^&%]*(?:&|%)[^&%]*)+$
RewriteRule ^ - [R=404,L]

Не выходит. Подскажите пожалуйста.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
@dodo512
Тут правильнее на стороне php реализовать нормальную работу с адресом.
Но если это древний скрипт и лень ковыряться в нём, то можно попробовать так:
RewriteEngine on

RewriteCond %{QUERY_STRING} !^get=[a-zA-Z0-9-_]+$
RewriteRule ^money\.php - [R=404,L]

Ставить в начало файла .htaccess выше остальных правил.

Свою страницу 404 можно указать с помощью ErrorDocument.
ErrorDocument 404 /file.html
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы