htaccess 将根目录重定向到子文件夹

Posted

技术标签:

【中文标题】htaccess 将根目录重定向到子文件夹【英文标题】:htaccess to redirect root to subfolder 【发布时间】:2021-09-03 12:05:44 【问题描述】:

我们有一个 GoDaddy 主机。在 public_html 中,我们有许多文件夹,每个文件夹用于不同的站点。

主站点 (mysite.com) 通常应位于 public_html,但我们将它们移至 public_html/mysite。我们有一个 htaccess 文件来处理这个变化。

mysite.com 是一个精简的 (php) 网站。在其公用文件夹中是另一个重定向到公用子文件夹的 htaccess 文件。

我们试图将 mysite 重定向到不同的网址,但出现了问题。现在,如果我访问 mysite.com,它会显示 Forbidden。此外,FTP 不再工作。当我尝试与 Filezilla 连接时,我得到了

    Connection attempt failed with "EAI_NONAME - Neither nodename nor servname provided, or not known".

这是因为我尝试连接到 ftp.mysite.com。如果我将其更改为 IP,它确实有效。但显然 mysite.com 出了点问题。

public_html/mysite中当前的htaccess如下:

RewriteCond %HTTP_HOST ^(www\.)?mysite\.com$ [NC]
RewriteRule ^(?!public)(.*)$ /public/$1 [L]

关于如何让它再次工作的任何想法?我认为问题在于域指向 public_html 文件夹的根目录而不是 public_html/mysite 但不知道如何解决这个问题。

更新

我们在 public_html 文件夹中有一个 htaccess 文件

RewriteOptions inherit

RewriteEngine on
RewriteCond %HTTP_HOST ^(www\.)?mysite\.com$ [NC]
RewriteRule ^(?!mysite)(.*)$ /mysite/$1 [L]

如果我删除它,所有子域都可以工作,但 mysite.com 会显示 Forbidden。如果我启用该文件,那么包括 mysite.com 在内的每个子域都会显示内部服务器错误。

【问题讨论】:

尝试注释掉RewriteOptions inherit @anubhava 这行得通。谢谢 【参考方案1】:

您可能在站点根目录中有此 .htaccess:

RewriteEngine On

RewriteCond %HTTP_HOST ^(www\.)?mysite\.com$ [NC]
RewriteRule ^(?!mysite/)(.*)$ mysite/$1 [L,NC]

您应该删除 RewriteOptions inherit 指令,因为它在这里没有任何用途。

还要注意重写规则中的一些小修复。

【讨论】:

感谢先生分享好代码。如果不存在任何其他 htaccess(继承选项)并且我们正在使用它,请告诉我;那么它会引起问题吗? 此规则永远不应在子目录 .htaccess 中继承,因为它将所有请求路由到 mysite/ 文件夹,并且在另一个子目录中不可用。

以上是关于htaccess 将根目录重定向到子文件夹的主要内容,如果未能解决你的问题,请参考以下文章

使用.htaccess将域重定向到子文件夹

.htaccess重定向到子文件夹(即公用文件夹)

.htaccess - 将所有 URL + 现有目录重定向到 index.php

Htaccess 将所有文件从一个域中的子目录重定向到另一个域

.htaccess 重定向影响子域

htaccess 将所有请求重定向到 index.php,子文件夹除外