Использование 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 для получения более подробной информации / конфигурации.