0

我使用 hostmonster 帐户托管多个网站。每个站点都位于我的 public_html 文件夹的子目录中,以便在管理站点时让我保持清醒。例如,我的主域位于 public_html/joshorndorff.com

我已经在我的 public_html 文件夹中设置了我的 .htaccess 文件,以按照https://my.hostmonster.com/cgi/help/347的建议将流量重定向到适当的子目录

# .htaccess main domain to subdirectory redirect
RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www.)?joshorndorff.com$
RewriteCond %{REQUEST_URI} !^/joshorndorff.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /joshorndorff.com/$1

RewriteCond %{HTTP_HOST} ^(www.)?joshorndorff.com$
RewriteRule ^(/)?$ joshorndorff.com/index.php [L]

然后在我的子目录中,我使用drupal 默认的.htaccess 作为取消注释重定向到www 的行。子域。子目录中的相关行是:

RewriteCond %{HTTP_HOST} ^joshorndorff\.com$ [NC]
RewriteRule ^(.*)$ http://www.joshorndorff.com/$1 [L,R=301]

这一切都很好,但我仍然有两个问题。

  1. 当我键入 www.joshorndorff.com/joshorndorff.com/index.php 时,不会发生重写,并且域名和子目录(与域名相同的名称)都显示在地址栏中

  2. 当我在地址栏中输入我的静态 IP 地址 (67.20.112.212) 时,我没有被重定向到我的网站,而是看到我放入 public_html 中的 index.html 用于测试目的/

我在http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/上阅读了关于 mod_rewrite 的优秀教程,但仍然无法解决这两个问题中的任何一个。我会喜欢任何建议或工作代码,但更想了解为什么 RewriteRule ^joshorndorff.com/ / [NC]

不符合我的预期。

非常感谢!——乔什·奥恩多夫

4

1 回答 1

0

在下面提供的示例中,我将您的域替换为 example.com。

# 1

您编写重写条件/规则的方式是预期的行为。为了防止它发生,您需要添加另一个匹配特定子目录的条件/规则集并重写它。这必须在您的子目录中的 Drupal .htaccess 文件中的其他规则之前添加。

否则,您基本上是在告诉它匹配域名,并将其他所有内容作为您的第一个变量传递:$1,包括子目录。

以下是使用 example.com/example.com/index.php 的示例:

RewriteCond %{HTTP_HOST} ^example\.com\/example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

#2

您的第二个问题(按 IP 浏览)正在发生,因为您的重写规则仅与您的域名匹配。

如果要将 IP 重定向到站点的域名,则需要匹配主机,在您的情况下为 IP 地址,然后重写到您的域:

RewriteCond %{HTTP_HOST} !^(.*)$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

如果您真的希望通过 IP 浏览工作,您可以执行以下操作:

RewriteCond %{HTTP_HOST} !^(.*)$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

请注意,在解决 #2 时,您必须调整我在 #1 中显示的规则以用于 IP 地址,并且仍然匹配子目录。此外,我的示例并不能完全替代您的规则,但应该足以让您轻松适应它。您也许可以将您的 URI 和文件条件添加到 #1,但我没有专门对其进行测试。

于 2014-08-15T14:05:06.477 回答