在子域中使用 htaccess 内部的拒绝来限制对自身的访问

在子域中使用 htaccess 内部的拒绝来限制对自身的访问

我正面临一个奇怪的情况,但我找不到正确的答案。

我正在使用某种 API,可以通过它向来自同一根域的某些请求发送响应。

我的 api 位于子域中(https://api.mysite.com) 中还有一些客户端框架PHP,例如

  • 我的站点
  • mobile.mysite.com
  • admin.mysite.com

我只希望这个 API 可以从同一个根域访问。因此我添加了 AccessControlAllowOrigin 标头,效果很好。

但问题是,我还想确保没有人可以访问此 API,因为 CORS 是基于浏览器的,并且我可以轻松地从其他工具(例如 POSTMAN)访问此 API。

这就是为什么我添加了一些代码,.htaccess以便只有来自同一个知识产权可以访问我的系统。

这是我的.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 ()

我错过了什么。

谢谢。

PSRequire ip allow from // MY IP HERE标志根本没有阻止任何东西。

答案1

尝试以下类似操作来仅允许来自本地 IP(您的服务器的 IP)的连接:

Require local

并授权外部 IP:

Require ip your_authorized_ip

这些是新的 Apache2.4 符号。请参阅Apache2.4 访问控制文档以获取更多详细信息/配置。

答案2

如果有人遇到同样的问题,感谢@Panama Jack 在 SO 中给出的答案,以下是我的做法。

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

Require env canpass
Require env canpass2

这里是原始答案

相关内容