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

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

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

Мой API-интерфейс находится в поддомене ( https://api.mysite.com/). PHP, такие как

  • mysite.com
  • mobile.mysite.com
  • admin.mysite.com

Я только хочу, чтобы этот 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 флаг вообще ничего не блокирует.

2 ответа

В случае, если кто-либо сталкивается с той же проблемой, спасибо @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 для получения более подробной информации / конфигурации.

Другие вопросы по тегам