【发布时间】:2014-02-24 06:12:14
【问题描述】:
我有一个由 www.mysite.com 上的 apache2 提供的 REST API。
其余的 api 可在 www.mysite.com/rest/...
但是盒子上没有名为/rest的文件夹,都是重写规则发生的。
如何使用 .htaccess 文件实现以下功能:
1) 允许访问来自 www.mysite.com/rest/... 的所有请求(即任何请求,只要它是虚拟文件夹 /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”
【问题讨论】:
-
发布您当前的 htaccess 规则。
-
我已经这样做了作为原始帖子的编辑。
-
@PanamaJack:我现在添加了一些指令,这些指令可以正确检测 IP 是否不是 123.45.67.89,但它错误地拒绝访问所有内容,包括 /rest/ 下的任何内容...我有 RewriteCond % {REQUEST_FILENAME} !rest/ ....then.... RewriteRule ^(.+) /tmp/$1 [L] 我需要什么小调整?
标签: .htaccess mod-rewrite apache2