Назад | Перейти на главную страницу

Использование запрета для всех внутри htaccess в поддомене ограничивает доступ к себе

Я столкнулся со странной ситуацией, на которую я не мог найти правильный ответ.

Я использую какой-то API, где я могу отправлять ответы на определенные запросы из того же корневого домена.

Мой api находится в субдомене (https://api.mysite.com) И есть несколько клиентских фреймворков в PHP, Такие как

Я хочу, чтобы этот API был доступен только из того же корневого домена. Поэтому я добавил заголовки AccessControlAllowOrigin, которые работают неплохо.

Но проблема в том, что я также хочу убедиться, что никто не может получить доступ к этому API, потому что CORS основан на браузере, и я могу легко получить доступ к этому API из других инструментов, таких как POSTMAN.

Вот почему я добавил код в свой .htaccess так что только из того же IP может получить доступ к моей системе.

Вот мой файл .htaccess.

php_flag display_errors on
php_value error_reporting 9999


SetEnvIf Origin "http(s)?://(www\.)?(mysite.com|mobile.mysite.com|admin.mysite.com)$" AccessControlAllowOrigin=$0
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header merge Vary Origin

RewriteEngine On
RewriteBase /

order allow,deny
deny from all
allow from // MY IP HERE

<RequireAny>
Require ip allow from // MY IP HERE
</RequireAny>

RewriteCond     %{SERVER_PORT} ^80$
RewriteRule     ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]


# DirectoryIndex none.none
# Options -Indexes

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Но проблема в том, что система сама блокируется, я имею в виду, когда я пытаюсь получить доступ к своему API с помощью AJAX Request, я получаю такую ​​ошибку:

Failed to load resource: the server responded with a status of 403 ()

Что мне не хватает.

Спасибо.

PS Require ip allow from // MY IP HERE flag вообще ничего не блокирует.

Если кто-то сталкивается с такой же проблемой, спасибо @Panama Jack за ответ в SO, вот как я это сделал.

SetEnvIf Referer "example\.com" canpass
SetEnvIf Referer "^mobile\.example\.com" canpass2

Require env canpass
Require env canpass2

Здесь оригинальный ответ.

Попробуйте что-то вроде этого, чтобы разрешить соединения только с локального IP (IP вашего сервера):

Require local

И для авторизации внешних IP:

Require ip your_authorized_ip

Это новые обозначения Apache2.4. Видеть документы управления доступом Apache2.4 для более подробной информации / конфигурации.