Команда htaccess разрешает запросы только от одного сервера (без указания IP) - PullRequest
5 голосов
/ 23 ноября 2011

То, чего я пытаюсь добиться, - это использовать htaccess, чтобы разрешать запросы, поступающие только с одного и того же сервера, но делать это с помощью доступных переменных и не указывать IP-адрес.Цель состоит в том, чтобы иметь возможность запускать задания cron и ajax-запросы к файлам в соответствующей папке, но возвращать страницу 404, если пытался получить прямой доступ.

Вот что у меня есть:

Options -MultiViews +FollowSymLinks  
RewriteEngine On    
RewriteCond %{REMOTE_ADDR} !%{SERVER_ADDR}[NC]  
RewriteRule ^(.*)$ /error404.html [L,R=404]  

Это прекрасно работает для AJAX.Это работает и для cronjobs, если сервер использует тот же исходящий IP-адрес, но если исходящий IP-адрес сервера отличается от IP-адреса сайта, очевидно, он потерпит неудачу и вернет 404, потому что %{REMOTE_ADDR} отличается от %{SERVER_ADDR}.Одним из решений было бы увидеть исходящий IP-адрес для этого сервера и добавить его в качестве другого исключения.Однако я ищу более подходящее решение.Я пытался использовать регулярные выражения, чтобы соответствовать только первой части IP, но мне не повезло с этим.Не знаю, как это сделать.В основном с помощью регулярных выражений я пытаюсь добиться следующего: предположим:

%{REMOTE_ADDR} = 192.322.122.50  
%{SERVER_ADDR} = 192.322.122.1  

Это две переменные, для которых мне нужно найти правильное выражение сравнения.Это выражение вернет true, если первая часть IP идентична.

Другим способом было бы указать допустимый диапазон, но я не "знаю", что такое требуемый диапазон.Я знаю, что это первая часть переменной SERVER_ADDR, но я не знаю, как сказать серверу, что я имею в виду: D

Надеюсь, я не слишком запутался.В конечном итоге я ищу способ определить, поступает ли запрос с того же сервера, что и сайт, на котором он находится.И это должно быть достигнуто через файл .htaccess.Зачем?Поскольку защищенная папка также содержит файлы, отличные от сценариев php, альтернативным вариантом будет динамическое обслуживание всех этих файлов и использование PHP для всех условий.Использование простой команды htaccess было бы намного элегантнее.Я просто надеюсь, что есть способ сделать это.

1 Ответ

2 голосов
/ 23 ноября 2011

Это не проверено, но вы можете попробовать, если хотите:

# note that this only works if both server and visitor are using IPv4 addresses
RewriteCond %{SERVER_ADDR} ^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$
RewriteCond %{REMOTE_ADDR} !^%1\.%2\.%3\.([0-9]{1,3})$
RewriteRule ^.*$ error404.html [R=404,L]

Дайте мне знать, если это работает, но не стреляйте в меня, если это не так:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...