允许本地网络中的目录和.htaccess中的唯一虚拟主机

eyh26e7m  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(186)

我已经在我的Raspberrypi上安装了一个NextCloud。我想在我的本地网络中使用它进行文件传输,并在任何地方进行联系人和日历。
我的Nextcloud位于/var/www/html/nextcloud。我还创建了一个文件/etc/apache2/sites-available/nextcloud.conf来启用虚拟主机。基本上:

<VirtualHost *:80>
  DocumentRoot /var/www/html/nextcloud/
  ServerName  nextcloud.example.com

  <Directory /var/www/html/nextcloud/>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews

    <IfModule mod_dav.c>
      Dav off
    </IfModule>
  </Directory>

  SetEnv HOME /var/www/html/nextcloud
  SetEnv HTTP_HOME /var/www/html/nextcloud
</VirtualHost>

可通过以下链接访问nextcloud:

  • 192.168.2.100/nextcloud
  • nextcloud.example.com
  • example.com/nextcloud

我的问题:是否有办法禁止通过example.com/nextcloud访问?
我试着将deny, allow条目添加到/var/www/html/nextcloud/.htaccess中。但是要么我阻塞太多,要么它不工作。感谢帮助。

sxpgvts3

sxpgvts31#

example.com/nextcloud之所以可以访问,是因为您将子域指向了主域文档根目录之外的子目录(如主域VirtualHost中所定义)。如果子域是一个完全独立的实体,那么最好将其指向主域文档根目录之外的区域。
我尝试在/var/www/html/nextcloud/.htaccess中添加deny,allow条目
如果要在.htaccess中阻止此操作(与主域的vHost配置相反),那么您需要检查请求的Host头。即nextcloud.example.com以外任何内容(因此它也会拦截透过IP位址的要求)。而不是检查您要拦截的主机名称。您可以使用mod_rewrite来执行此作业,例如:

# /var/www/html/nextcloud/.htaccess

RewriteEngine On

RewriteCond %{HTTP_HOST} !^nextcloud\.example\.com$
RewriteRule ^ - [F]

对于任何请求的Host报头 * 不是 *(如!前缀所表示的)nextcloud.example.com的请求,上面的代码以“403 Forbidden”响应。
您也可以在主域的vHost容器(而不是子域)中阻止此子目录。因此,它仅适用于对example.com的请求。例如:

<Directory /var/www/html/nextcloud>
    Require all denied
</Directory>

请注意,OrderAllowDeny是Apache 2.2指令,以前在Apache 2.4上已弃用。您应该在Apache 2.4上使用Require(mod_authz_core)。

相关问题