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 - 将所有 URL + 现有目录重定向到 index.php