在虚拟主机中创建别名目录

Posted

技术标签:

【中文标题】在虚拟主机中创建别名目录【英文标题】:Create an Alias Directory inside a Virtual Host 【发布时间】:2012-10-04 11:07:08 【问题描述】:

在问这个问题之前,我检查了here、here、here、here 和 here。我想我的搜索能力很弱。

我正在使用WampServer 版本2.2e。我有一个需要,我需要一个虚拟主机内的虚拟路径。让我说一下我拥有的两个主机。

主虚拟主机(本地主机)

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "C:/Wamp/www"
</VirtualHost>

我的应用虚拟主机

<VirtualHost *:80>
    ServerName apps.ptrl
    DocumentRoot "C:/Wamp/vhosts/ptrl/apps"
    ErrorLog "logs/apps-ptrl-error.log"
    CustomLog "logs/apps-ptrl-access.log" common
    <Directory "C:/Wamp/vhosts/ptrl/apps">
        allow from all
        order allow,deny
        AllowOverride All
    </Directory>
    DirectoryIndex index.html index.htm index.php
</VirtualHost>

我的博客虚拟主机

<VirtualHost *:80>
    ServerName blog.praveen-kumar.ptrl
    DocumentRoot "C:/Wamp/vhosts/ptrl/praveen-kumar/blog"
    ErrorLog "logs/praveen-kumar-ptrl-error.log"
    CustomLog "logs/praveen-kumar-ptrl-access.log" common
    <Directory "C:/Wamp/vhosts/ptrl/praveen-kumar/blog">
        allow from all
        order allow,deny
        AllowOverride All
    </Directory>
    DirectoryIndex index.html index.htm index.php
</VirtualHost>

我现在的要求是 http://apps.ptrl/blog/http://blog.praveen-kumar.ptrl/ 应该是同一个目录。我想到的一件事是,将blog文件夹移动到apps文件夹内,但它与Git相连,还有其他东西,所以无法移动文件夹。

所以,我想以这种方式为VirtualHost 创建一个alias

<VirtualHost *:80>
    ServerName apps.ptrl
    DocumentRoot "C:/Wamp/vhosts/ptrl/apps"
    ErrorLog "logs/apps-ptrl-error.log"
    CustomLog "logs/apps-ptrl-access.log" common
    <Directory "C:/Wamp/vhosts/ptrl/apps">
        allow from all
        order allow,deny
        AllowOverride All
    </Directory>
    DirectoryIndex index.html index.htm index.php

    # The alias to the blog!
    Alias /blog "C:/Wamp/vhosts/ptrl/praveen-kumar/blog"
    <Directory "C:/Wamp/vhosts/ptrl/praveen-kumar/blog">
        allow from all
        order allow,deny
        AllowOverride All
    </Directory>
</VirtualHost>

但是当我尝试访问http://apps.ptrl/blog 时,我得到了一个Error 403 Forbidden 页面。

我做对了吗?如果您需要查看访问日志和错误日志,它们在这里:

# Access Log
127.0.0.1 - - [14/Oct/2012:09:53:11 +0530] "GET /blog HTTP/1.1" 403 206
127.0.0.1 - - [14/Oct/2012:09:53:11 +0530] "GET /favicon.ico HTTP/1.1" 404 209
127.0.0.1 - - [14/Oct/2012:09:53:53 +0530] "GET / HTTP/1.1" 200 6935
127.0.0.1 - - [14/Oct/2012:09:53:53 +0530] "GET /app/blog/thumb.png HTTP/1.1" 404 216
# Error Log
[Sun Oct 14 09:53:11 2012] [error] [client 127.0.0.1] client denied by server configuration: C:/Wamp/vhosts/ptrl/praveen-kumar/blog
[Sun Oct 14 09:53:11 2012] [error] [client 127.0.0.1] File does not exist: C:/Wamp/vhosts/ptrl/apps/favicon.ico
[Sun Oct 14 09:53:53 2012] [error] [client 127.0.0.1] File does not exist: C:/Wamp/vhosts/ptrl/apps/app/blog, referer: http://apps.ptrl/

急切地等待一些帮助。如果需要,我准备提供更多信息。


更新 #1:根据felipsmartins 给出的说明更改了 VirtualHosts 声明:

<VirtualHost *:80>
    ServerName apps.ptrl
    DocumentRoot "C:/Wamp/vhosts/ptrl/apps"
    ErrorLog "logs/apps-ptrl-error.log"
    CustomLog "logs/apps-ptrl-access.log" common
    # The alias to the blog!
    Alias /blog "C:/Wamp/vhosts/ptrl/praveen-kumar/blog"
    <Directory "C:/Wamp/vhosts/ptrl/praveen-kumar/blog">
        allow from all
        order allow,deny
        AllowOverride All
    </Directory>
    <Directory "C:/Wamp/vhosts/ptrl/apps">
        allow from all
        order allow,deny
        AllowOverride All
    </Directory>
    DirectoryIndex index.html index.htm index.php
</VirtualHost>

更新 #2:另一个问题:

我可以访问该网站。物理链接现在正在工作。即,我可以打开http://apps.ptrl/blog/index.php,但不能打开http://apps.ptrl/blog/view-1.ptf,它会被翻译成http://apps.ptrl/blog/index.php?page=view&amp;id=1。有什么解决办法吗?

【问题讨论】:

【参考方案1】:

注意,如果您要在 DocumentRoot 之外的目录中创建 Alias,您可能需要明确允许访问目标目录:

<VirtualHost *:80>
    ServerName apps.ptrl
    DocumentRoot "C:/Wamp/vhosts/ptrl/apps"
    ErrorLog "logs/apps-ptrl-error.log"
    CustomLog "logs/apps-ptrl-access.log" common

    # Puts here, before Directory directive :) 
    Alias /blog "C:/Wamp/vhosts/ptrl/praveen-kumar/blog"

    <Directory "C:/Wamp/vhosts/ptrl/apps">        
        allow from all
        order allow,deny
        AllowOverride All
    </Directory>
</VirtualHost>

还要注意,即使在不区分大小写的文件系统上,URL 路径(别名的第一部分)也是区分大小写的。

另外,检查C:/Wamp/vhosts/ptrl/praveen-kumar/blog 目录的权限。

参考

Apache Module mod_alias Apache Virtual Host

【讨论】:

欲了解更多详情,请参阅 Apache 指南,link @felipsmartines 请查看更新后的答案。我也重新启动了 Apache2 服务器。没有运气。 说真的,问题出在哪里。我以前也这样做过,但是没有用!不管怎样,你是魔术师!!! :P @PraveenKumar,它成功了吗?对不起,我的英语很糟糕O.o 是的,它奏效了。但我有一个问题。看,我可以访问该站点,但 .htaccess 无法正常工作。它说404 Not Found。你能帮忙吗?

以上是关于在虚拟主机中创建别名目录的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2010 和 Windows 10 中创建虚拟目录、IIS 时出错

在 IIS 6.0 中创建虚拟目录时的正确文件夹位置?

如何在linux中创建虚拟环境

如何在 .htaccess 中创建别名以直观地隐藏 URL 的目录路径

在 Cloudera Impala(虚拟机)中创建数据库时出错

在win7上的不同目录中的wamp 2.5中创建vhost返回禁止错误