【问题标题】:.htaccess redirect without affecting subdomain.htaccess 重定向而不影响子域
【发布时间】:2015-09-09 22:55:56
【问题描述】:

我在 home/user/public_html 中有我们的主网站 https://www.example.com.au 和一个位于 home/user/sub https://sub.example.com.au 的子域

它们都是 Joomla 网站。

在 home/user/public_html 中,我有以下 .htaccess 文件,我用它来使我们主网站的每次页面访问都使用 https 和 www - 使用的代码是:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R=301,L]

上面的 .htaccess 文件将所有子域访问重定向到 https://www。 sub.example.com.au - 我怎样才能阻止它这样做,同时让它加载所有对 https://sub 的子域访问。 example.com.au

我认为 .htaccess 文件只会影响其中的目录,但它似乎会影响子域,即使它不在 public_html 文件夹中。

任何建议表示赞赏。谢谢。

由于我没有足够的声誉,请注意必须在上面的某些链接中放置空格。

【问题讨论】:

  • 您确定您的子域使用/home/user/sub 作为它的文档根目录吗? .htaccess 文件只影响它们所在的目录和子目录。我认为问题是您在子域根目录中有一个类似的.htaccess 文件,没有为子域正确设置 apache 并且正在加载主根目录,或者这些规则存在于 apache 配置中,因此它们会影响所有网站。
  • 谢谢乔纳森。我对它们所在的目录持肯定态度,是的,子目录也有它自己的 .htaccess(默认的 Joomla 之一)。也许您对 apache 没有正确设置域是正确的。我会尝试删除并阅读它。

标签: php apache .htaccess mod-rewrite redirect


【解决方案1】:

简单的答案是不使用正则表达式来匹配主机名。

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} example.com.au
RewriteRule (.*) https://www.example.com.au/$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} www.example.com.au
RewriteRule (.*) https://www.example.com.au/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} example.com.au
RewriteRule (.*) https://www.example.com.au/$1 [R=301,L]

另一个选项是在 Apache 配置中更新虚拟主机:

<VirtualHost *:80>
    ServerName example.com.au:80
    ServerAlias www.example.com.au:80
    RedirectPermanent / https://www.example.com.au/
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com.au:443
    RedirectPermanent / https://www.example.com.au/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com.au:443
    # server config goes here
</VirtualHost>

但可能的解释是 .htaccess 文件已在子域目录中复制或符号链接。

【讨论】:

  • 感谢 miken32。我尝试了您推荐的 .htaccess 更改(在 public_html .htaccess 文件中,然后是子文件,但没有任何区别)。虚拟主机 Apache 配置超出了我的想象。我对 public_html .htaccess 文件进行了更改以进行测试并得出结论,即使它与子目录位于不同的目录中,它也是导致重定向的文件......我已经将网站移动到另一个 Web 服务器上并且它立即按预期工作......
  • @AdamGatt:请不要接受不适合您的答案。
猜你喜欢
  • 2013-09-25
  • 2015-05-09
  • 2015-10-16
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 2019-08-01
相关资源
最近更新 更多