我想要实现的目标
我的网络服务器上有公共和私有网站,我想以某种方式将它们分开,但我希望这种分离是不可见的。
例如,DocumentRoot 是/var/www
公共项目位于 下/var/www/public
,私有项目位于 下/var/www/private
。
如果域是www.example.com
,我想要访问的public/publicproj1
URL 将是www.example.com/publicproj1
。此外,如果我想要的private/privateproj1
URL 将是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>
并且该目录下的所有内容仅当您来自允许的网络时才可访问。(有指定Allow
ed 主机的其他方法)。
我的域名是
www.example.com
。我
想/var/www/html/public/publicproj1
达到www.example.com/publicproj1
/var/www/html/private/privateproj1
www.example.com/privateproj1
这有点难。你需要重写规则或Alias
每个项目都有相应的指令。正如您所说,这不是理想的情况,因此让我们看看其他一些选择。
按照我上面所述配置目录结构后,您就可以直接访问目录www.example.com/public/proj1
。www.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/