仅允许访问特定的mod_rewrite生成的URL,拒绝所有其他http请求

时间:2014-02-21 13:06:43

标签: .htaccess mod-rewrite apache2

我在www.mysite.com上的apache2上提供了一个REST API。

其余的api可在www.mysite.com/rest /...

访问

但是盒子上没有名为/ rest的文件夹,它都是通过重写规则发生的。

如何使用.htaccess文件实现以下目的:

1)允许访问来自www.mysite.com/rest / ...的所有请求(即任何请求,只要它是虚拟文件夹/其余的请求)

2)仅允许来自特定IP地址的任何其他请求,例如虚构的IP 123.45.67.89;对于所有其他IP地址,拒绝

原因是我不希望任何人登陆www.mysite.com的管理页面。

谢谢

httpd.conf的内容如下:

<Directory "/opt/bitnami/apps/myapp/htdocs/web">
Options -Indexes +FollowSymLinks -MultiViews
AllowOverride None

<IfVersion < 2.3 >
 Order allow,deny
 Allow from All
</IfVersion>
<IfVersion >= 2.3>
 Require all granted
</IfVersion>
                   <IfModule pagespeed_module>
                   ModPagespeedDisallow "*"
                   </IfModule>
RewriteEngine on
RewriteBase /

#   Force login to be SSL
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^(.+)\.cloud\.myapp\.com$ [NC]
RewriteRule ^/?web/login/?(.*) https://%{SERVER_NAME}/web/login/$1 [R,L]

# if ack directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule ^.*$ /index.php [L]
### END: .htaccess inline ###

<LimitExcept GET HEAD PUT DELETE PATCH POST>
    Allow from all
</LimitExcept>

<IfDefine USE_PHP_FPM>
   RewriteEngine On
   RewriteOptions Inherit

   RewriteRule ^(.*\.php(/.*)?)$ fcgi://uds=%2fopt%2fbitnami%2fphp%2fvar%2frun%2fmyapp.sock/%{REQUEST_FILENAME} [P,L]
</IfDefine>

包含“/opt/bitnami/apps/myapp/conf/htaccess.conf”

1 个答案:

答案 0 :(得分:1)

尝试并替换此

<IfVersion < 2.3 >
 Order allow,deny
 Allow from All
</IfVersion>
<IfVersion >= 2.3>
 Require all granted
</IfVersion>

通过以下内容了解它的工作原理。

Order deny,allow
Deny from all
Allow from 123.456.67.89

123.456.67.89 IP地址替换为您的IP地址

然后在/ rest文件夹的另一个目录下添加另一个目录指令。

<Directory /opt/bitnami/apps/myapp/htdocs/web/rest>
Order Allow,Deny
Allow from All
</Directory>

如何运作。同样,您也可以在root和/ rest中的htaccess中执行此操作。