我应该如何在我的网络服务器上区分公共页面和私人页面?

我应该如何在我的网络服务器上区分公共页面和私人页面?

我想要实现的目标
我的网络服务器上有公共和私有网站,我想以某种方式将它们分开,但我希望这种分离是不可见的。
例如,DocumentRoot 是/var/www公共项目位于 下/var/www/public,私有项目位于 下/var/www/private
如果域是www.example.com,我想要访问的public/publicproj1URL 将是www.example.com/publicproj1。此外,如果我想要的private/privateproj1URL 将是www.example.com/privateproj1
我希望仅限/var/www/private于本地网络,但public应该可以从任何地方访问。

下面有大量的项目private,我不想apache.conf每次将某些东西放在那里时都进行新的设置。

/var/www/public/startingpage此外,如果没有其他请求,我希望得到服务,因此www.example.com会显示此页面。


我到目前为止尝试过的:
1.)创建 DocumentRoot 以/var/www将公共项目放在其下,并对文件夹设置重写规则private,如下所示:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ private/$1 [QSA]

这不起作用,因为私人文件夹下的文件夹中有更多的.htaccess 文件。(例如带有前端控制器、论坛等的应用程序需要自己的.htaccess)

2.) 将 DocumentRoot 设为/var/www/private,但公共项目无法使用。(我可以使用不同的 Access 选项创建两个文档根目录吗?)我进行了类似的输入,Alias /publicproj1 /var/www/publicproj1但我使用以下设置安装了 Redmine:

RewriteEngine On
RewriteRule   ^/$  /redmine  [R]

<Directory /home/www/redmine>
        RailsBaseURI /redmine
        PassengerResolveSymlinksInDocumentRoot on
</Directory>

我无法用一个简单的Alias条目来代替它(或者可以吗?)

我的问题
我应该创建什么文件夹结构?我应该制定什么重定向规则?当没有其他请求时,如何设置/var/www/startingpage显示?

答案1

好的,您想private通过 IP 地址限制对项目的访问,并且您有以下目录结构:

  • DocumentRoot/var/www
    • 公共项目正在/var/www/public
    • 私人项目正在/var/www/private

因此,在您的 Apache 配置文件(httpd.conf)中添加<Directory>如下指令:

<Directory /var/www/private>
   Order deny,allow
   Deny from all
   Allow from 10.0.0.0/24
</Directory>

并且该目录下的所有内容仅当您来自允许的网络时才可访问。(有指定Allowed 主机的其他方法)。


我的域名是 www.example.com。我
/var/www/html/public/publicproj1达到www.example.com/publicproj1/var/www/html/private/privateproj1www.example.com/privateproj1

这有点难。你需要重写规则或Alias每个项目都有相应的指令。正如您所说,这不是理想的情况,因此让我们看看其他一些选择。

按照我上面所述配置目录结构后,您就可以直接访问目录www.example.com/public/proj1www.example.com/private/proj1如果
这适合您,那么您就大功告成了。

如果这个解决方案不够好,请考虑移动您的公共项目,使它们直接位于下方/var/www/html——您的公共项目将可以通过 进行访问www.example.com/publicproj1,而您的私人项目将可以通过/private/添加一些内容进行访问。(假设您不太在意“私人”项目的 URL 有点丑陋,这样就避免了Alias对您的公共内容进行任何 ing 的需要)。


关于起始页,您可以根据以下规则显示startingpage文件夹的内容:www.example.com

RewriteEngine On

# Don't apply to URLs that go to existing files or folders.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Only apply to URLs that aren't already under folder.
RewriteCond %{REQUEST_URI} !^/startingpage/

RewriteRule ^(.*)$  /startingpage/$1

答案2

为什么不能使用 .htaccess 密码保护方法限制这些文件夹?

http://viralpatel.net/blogs/password-protect-your-webpages-using-htaccess/

相关内容