【问题标题】:How to redirect root domain to subfolder (with https) and rest of addon domains to subfolders (without https)如何将根域重定向到子文件夹(使用 https)并将其余的插件域重定向到子文件夹(没有 https)
【发布时间】:2016-07-30 20:35:41
【问题描述】:

如何将根域重定向到子文件夹(使用 HTTPS),并将其他插件域的其余部分重定向到子文件夹(不使用 HTTPS)。

目前我在根目录中有这个.htaccess,它使用HTTPS 重定向到the-main-subfolder ok。但是我的另一个插件域,比如 domain2 也被重定向到 the-main-subfolder

我想将domain2 重定向到the-domain2-subfolder 不使用HTTPS

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RedirectMatch ^/$ /the-main-subfolder/

我不确定这段代码是否正确,因为我可能使用了通配符。我在网上搜索得到了这个代码,但是有太多的建议让我现在很困惑!

总结:当用户在浏览器中输入 domain1.co.uk 时,我在 root 中的主托管帐户应该转到 https://www.domain1.co.uk/the-main-subfolder,而我的插件域 http://domain2.co.uk 应该转到 http://www.domain2.co.uk/the-domain2-subfolder

【问题讨论】:

  • “根域”和“附加域”指的是什么?
  • 根域是当您购买主机时,默认域始终指向 cPanel 文件管理器中的 public_html 文件夹。附加域是一些其他域,您可以在之后添加到托管帐户,最好指向目录 /the-domain2-subfolder 中的索引文件
  • 所以您的托管套餐包含一个域,而您购买了其他域?这就是你想要表达的吗?

标签: .htaccess http redirect https subdirectory


【解决方案1】:

您可以使用额外的RewriteConds 来定义特定的重定向:

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^example.org$
RewriteRule ^ https://%{HTTP_HOST}/the-main-subfolder%{REQUEST_URI} [L,R=301,QSA]

RewriteCond %{HTTP_HOST} ^example1\.org$ 
RedirectRule ^(.*)$ /example1\.org-subfolder/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^example2\.org$ 
RedirectRule ^(.*)$ /example2\.org-subfolder/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^host1\.example\.org$ 
RedirectRule ^(.*)$ /host1\.example\.org-subfolder/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^host2\.example\.org$ 
RedirectRule ^(.*)$ /host2\.example\.org-subfolder/$1 [L,QSA]

我添加了一些示例来演示显式实现的可重复性,并且您可以为单独的域和主机名(有时被错误地称为“子域”)这样做。我总是更喜欢这种明确的表示法而不是通用方法,因为您可以单独修改事物,例如用于测试或调试目的。除非您显然处于大规模托管情况,否则基于数据库的方法是有意义的。

请注意,您所谓的“根域”(此处为example.org)的重定向现在有第二个RewriteCond。默认情况下,这两个条件都是AND-组合。

为了安全起见,您可能还想添加更多规则以将请求重定向到 https://example.org/host1.example.org-subfolder 之类的特定域名,因为根据您的描述,您的主机帐户中仅限于单个文件树。对http://test1.example.org/test1.example.org-subfolder/... 的请求相同,以消除文字文件夹名称。

哦,还有一个警告:上述语法仅适用于 .htaccess 样式文件。如果您可以访问真实的主机配置,那么您应该始终更愿意将此类规则放置在其中。但是,您需要稍微更改语法。 .htaccess 样式规则是出了名的容易出错,难以调试,而且它们确实减慢了 http 服务器的速度。它们仅作为最后一个选项提供给无法访问主机配置的用户。

【讨论】:

  • 感谢@arkascha - 我现在正在尝试这个!很好的解释 - 谢谢!
  • 好的 - 我尝试了你的建议,但它在所有域上都给了我错误 500。所以我把它调整到最小版本:'RewriteEngine On RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} ^domain1.co.uk$ RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R= 301,QSA]'
  • 你到底得到了什么错误?您的 http 服务器错误日志文件中写了什么?错误 500 很模糊...
  • 当然,错误 550 始终是“内部服务器错误”,即 http 状态 500 的定义。我的问题是实际错误是什么,您可以在 http 服务器错误日志文件中阅读,而不是浏览器中的某个位置。
  • 所有插件域都使用上述最少的行,但唯一的问题是主域 1 未重定向到子目录 /the-main-subfolder
【解决方案2】:

RewriteEngine On RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} ^domain1.co.uk$ RewriteRule ^ https://%{HTTP_HOST}/the-main-subfolder%{REQUEST_URI} [L,R=301,QSA]

感谢@arkascha - 上面的代码现在一切正常。我想我们根本不需要在这里提到所谓的附加域,因为当我们在托管包上添加后续域(即附加域)时,cPanel 会在内部为它们处理子目录!

【讨论】:

    【解决方案3】:

    只是为了更新我以前的解决方案部分有效,因为它几乎没有小问题/错误。于是回到绘图板,突然意识到我没有必要太努力了!!

    先删除旧的 htaccess 文件,然后按照下面的说明进行操作..

    cPanel 已经在面板图标的“重定向”中提供了解决方案。

    我只需要在用户界面文本框中输入所有内容,例如选择域名 =“domain1”、旧文件夹 =“\”、新文件夹 =“https://www.domain1.co.uk/the-main-subfolder”——然后点击创建重定向。在这样做时,它会自动创建一个 .htaccess 文件。我在下面分享这个:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^domain1\.co\.uk$ [OR]
    RewriteCond %{HTTP_HOST} ^www\.domain1\.co\.uk$
    RewriteRule ^/?$ "https\:\/\/www\.domain1\.co\.uk\/the-main-subfolder\/" [R=301,L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 2019-04-26
      • 2013-04-01
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多