从子文件夹托管主域

Posted

技术标签:

【中文标题】从子文件夹托管主域【英文标题】:Host Primary Domain from a subfolder 【发布时间】:2011-02-28 21:23:23 【问题描述】:

我在将子目录设置为我的主域的 public_html 时遇到问题,并获得了适用于该域子目录的解决方案。

背景

我的托管允许我托管多个站点,这些站点都运行良好。我在我的 ~/public_html/ 目录下设置了一个名为 /domains/ 的子文件夹,我在其中为每个单独的网站创建一个文件夹。我服务器上的文件夹结构如下所示:

public_html 域 网站一个 网站二 网站三 ...

这使我的网站保持整洁。唯一的问题是让我的“主域”适应这个系统。似乎我的主域以某种方式与我的帐户(或 Apache 或其他东西)相关联,因此我无法更改此域的“文档根目录”。我可以为我在 cPanel 中添加的任何其他域(“附加域”)定义文档根目录,这没有问题。但主域不同。

问题

有人告诉我编辑 .htaccess 文件,将主域重定向到子目录。这似乎很好用,而且我的网站在它的主页/索引页面上运行良好。

我遇到的问题是,如果我尝试导航浏览器以说出我的主站点的图像文件夹(仅作为示例),如下所示:

www.yourmaindomain.com/images/

然后它似乎忽略了重定向并在 url 中显示整个服务器目录,如下所示:

www.yourmaindomain.com/domains/yourmaindomain/images/

它实际上仍然显示正确的“/图像索引”页面,并显示我所有图像的列表。问题只是“漂亮”的 URL。

我的 .htaccess 示例

RewriteEngine on
RewriteCond %HTTP_HOST ^(www.)?yourmaindomain.com$
RewriteCond %REQUEST_URI !^/domains/yourmaindomain/
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ /domains/yourmaindomain/$1

RewriteCond %HTTP_HOST ^(www.)?yourmaindomain.com$
RewriteRule ^(/)?$ domains/yourmaindomain/index.html [L]

这个 htaccess 文件看起来正确吗?我只需要让我的主域表现得像一个插件域,并且它的子目录遵守重定向规则。

【问题讨论】:

应该被移到serverfault。 您最终是否使用虚拟主机解决了这个问题(根据公认的解决方案)?我有同样的问题,但不能在我的共享主机上使用虚拟主机 - 所以不幸的是,该解决方案实际上并没有为我解决问题。 【参考方案1】:

不要为此使用 mod_rewrite,请使用 virtual hosts。我不会在这里详细解释,您可以在上面的链接中找到所有必要的信息。 (提示:您可能需要基于名称的名称。)

您可能希望将您的东西从~/public_html/ 移到更通用的位置,例如/var/www//srv/www

除此之外:Don't use .htaccess files on production.

【讨论】:

共享主机上是否可以使用虚拟主机? 这取决于您的共享主机设置,您应该询问您的提供商。 @Marco:只是想说,如果他需要使用它们,他需要使用它们。正如我链接到的页面上的第一句话所说:“一般来说,除非您无权访问主服务器配置文件,否则您永远不应该使用 .htaccess 文件。” 我也有同样的问题,但不能在我的共享主机上使用虚拟主机。真的会喜欢基于 mod_rewrite 的解决方案...【参考方案2】:

我的组织方式和你一样。我的主域也有同样的问题。 这个 .htaccess 对我有用,甚至解决了丑陋的 URL 问题。

# .htaccess main domain to subdirectory redirect 

RewriteEngine on 
# Change example.com to be your main domain. 
RewriteCond %HTTP_HOST ^(www.)?example.com$ 
# Change 'subdirectory' to be the directory you will use for your main domain. 
RewriteCond %REQUEST_URI !^/subdirectory/ 
# Don't change the following two lines. 
RewriteCond %REQUEST_FILENAME !-f 
RewriteCond %REQUEST_FILENAME !-d 
# Change 'subdirectory' to be the directory you will use for your main domain. 
RewriteRule ^(.*)$ /subdirectory/$1 
# Change example.com to be your main domain again. 
# Change 'subdirectory' to be the directory you will use for your main domain 
# followed by / then the main file for your site, index.php, index.html, etc. 
RewriteCond %HTTP_HOST ^(www.)?example.com$ 
RewriteRule ^(/)?$ subdirectory/ [L]

【讨论】:

以上是关于从子文件夹托管主域的主要内容,如果未能解决你的问题,请参考以下文章

为啥将您的 Javascript 文件移动到您也拥有的不同主域?

主域和子域托管在不同的服务器上?

我可以在 2 个不同的托管服务中托管我的主域和它的子域吗

我需要在主域而不是子域上强制 ssl

AWS S3 静态托管的主域和 api 的子域

主域和电子邮件的不同地址