Я пытаюсь использовать 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
Это две переменные, для которых мне нужно найти допустимое выражение сравнения. Это выражение вернет истину, если первая часть IP-адресов идентична.
Другой способ - указать допустимый диапазон, но я не «знаю», какой диапазон нужен. Я знаю, что это первая часть переменной SERVER_ADDR
, но я не знаю, как сказать серверу, что я имею в виду: D
Надеюсь, я не слишком запутался. В конечном итоге я ищу способ определить, поступает ли запрос с того же сервера, что и сайт, на котором он находится. И это должно быть достигнуто с помощью.htaccess файл. Почему? Поскольку защищенная папка также содержит файлы, отличные от сценариев php, альтернативой может быть обслуживание всех их динамически и использование PHP для всех условий. Было бы намного элегантнее использовать простую команду htaccess. Я просто надеюсь, что есть способ сделать это.