修改两个站点的 htaccess 文件

Posted

技术标签:

【中文标题】修改两个站点的 htaccess 文件【英文标题】:Modify htaccess file for two sites 【发布时间】:2011-06-03 10:44:48 【问题描述】:

我的网络主机将我的“主”域名指向根 www 文件夹。该站点的 Web 文件位于“www/app/webroot”文件夹中。我目前使用 htaccess 文件中的以下内容启动并运行该站点:

RewriteBase /
RewriteEngine on
RewriteRule    ^$ app/webroot/    [L]
RewriteRule    (.*) app/webroot/$1 [L] 

我正在尝试为同一个站点创建一个开发站点。我在 www 文件夹中创建了一个名为“dev”的文件夹。因此,此文件夹的 Web 文件位于:“www/dev/app/webroot”我有一个指向 dev 文件夹的子域。当我在 dev 文件夹中使用与上面相同的 htaccess 时,它不起作用,因为(我相信)它是从根 www 文件夹继承设置。当页面加载时,它只是空白。如何设置我的 htaccess 文件以允许两个站点使用?

提前感谢您的帮助!我显然是这方面的新手。

【问题讨论】:

【参考方案1】:

所以我们会尝试清理这些东西:-)

避免使用 .htaccess。目录 /foo/bar 中的 .htaccess 中的所有设置都可以在 apache 配置中设置为目录设置(如果您在 apache conf 上提供有限的访问权限,.haccess 很有用,如果您拥有服务器,则不要使用它)。

<Directory /foo/bar>(...)</Directory>

然后您可以使用基于命名的虚拟主机访问您的站点。验证您是否有此选项:

NameVirtualHost *:80

当你拥有它时,美好的事情就可以开始了。 这将是您的第一个应用程序的虚拟主机:

<VirtualHost *:80>
    ServerName app
    ServerAlias www.app.somwhere.com
    ServerAlias app.somwhere.com
    DocumentRoot /www/app/webroot
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /www/app/webroot>
        Options Indexes FollowSymLinks
        # this prevent.htaccess reading, remove if you want .htaccess
            AllowOverride None
            # allow web access 
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

大多数 apache 设置都可以在这里定义。仅适用于您的第一个应用程序。 Apache 将为站点名称“app”或“www.app.somwhere.com”或“app.somwhere.com”完成的所有请求提供此配置。您可以定义很多别名(ServerAlias)。并且只能定义一个名称(ServerName)。

然后,如果您在浏览器中输入http://app/,您的浏览器将找不到服务器,因此请将其设置在您的/etc/hosts 中。这是每个想要访问您的应用程序的人都应该在主机文件中拥有的内容,直到您获得真正的 DNS(假设您的第一个应用程序是 app.somwhere.com,第二个应用程序是 foo.somwhere.com 和 92.128.52.226 是您的外部 IP) :

127.0.0.1 app.somwhere.com app foo foo.somewhere.com
92.128.52.226 app.somwhere.com app foo foo.somewhere.com

现在让我们为您的第二个应用添加另一个虚拟主机:

<VirtualHost *:80>
    ServerName foo
    ServerAlias www.foo.somwhere.com
    ServerAlias foo.somwhere.com
    DocumentRoot /www/foo/webroot
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /www/foo/webroot>
        Options Indexes FollowSymLinks
        # this prevent.htaccess reading, remove if you want .htaccess
            AllowOverride None
            # allow web access 
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

等等。 不要忘记重新启动您的 apache。没有重写规则。 nice virtualhosts 是 nice 配置的第一步,您将能够根据使用的名称定义规则、目录或位置特定的东西。甚至可以使用 php_value 为每个虚拟主机设置 php 配置,而不是在 php.ini 上进行全局共享。

输入

apache2 -S

要获取您的虚拟主机列表,您会看到第一个是“默认”的,如果 apache 不理解所请求站点的名称,它将提供此默认站点的名称(因此您可以添加一个顶部的特定虚拟主机来处理这些情况)。

【讨论】:

太棒了!谢谢。正是我需要的。 您可能需要在 Apache 2.4 上添加:'Require all grant'【参考方案2】:

尝试将 dev/ 添加到您的 dev .htaccess 的第 3 行和第 4 行中的路径。

【讨论】:

我试过了,没用。如果我将它添加到根文件夹中,它会弄乱主站点。如果我将它添加到 dev 文件夹中,我会收到一个错误,我认为是因为它正在寻找不存在的 www/dev/dev/app/webroot。【参考方案3】:

也许您应该删除 dev 文件夹中 .htaccess 中的“RewriteBase /”行?

【讨论】:

以上是关于修改两个站点的 htaccess 文件的主要内容,如果未能解决你的问题,请参考以下文章

HTACCESS 短网址并修改我的网址

通过https忽略htaccess文件

htaccess 文件不适用于特殊字符

.htaccess是什么

如何仅使用 .htaccess 文件设置 ssl

删除 index.php 并处理两个 Codeigniter 站点的子域,当一个在另一个站点中时