Я пытаюсь отфильтровать все URL-адреса серверной части на один IP-адрес в файле httpd.conf, используя этот фрагмент кода:
<Location /admin>
Order deny,allow
Deny from all
Allow from 100.x.xxx.xxx
</Location>
Этот отлично работает. Но я не могу найти способ сделать то же самое с /? Q = admin.
<Location /?q=admin>
Order deny,allow
Deny from all
Allow from 100.x.xxx.xxx
</Location>
Нужно ли мне какое-нибудь регулярное выражение с обратной косой чертой, чтобы избежать некоторых символов?
Проблема в том, что <Location>
(и <LocationMatch>
) директивы не работают со строками запроса (то, что идет после ?
) -- Видеть Этот ТАК вопрос & Документы Apache.
Вы можете сделать то же самое, используя mod_rewrite
и немного творчества - Есть даже пример управления доступом на основе строки запроса в документах.
Что-то вроде того, что ниже, должно быть близко к тому, что вам нужно.
# Applying for all query strings (admin|user)
RewriteCond %{QUERY_STRING} ^q=.*
RewriteCond %{REMOTE_ADDR} !0\.1\.2\.3
# Something is missing here (result: domain.com/page?q=admin) but it works because the link dies anyway on an error page
RewriteRule ^(.*) /page [QSA,L,R=301]