.htaccess 如何将根域重定向到子文件夹(使用https),将其他附加域重定向到子文件夹(不使用https)

.htaccess 如何将根域重定向到子文件夹(使用https),将其他附加域重定向到子文件夹(不使用https),.htaccess,http,redirect,https,subdirectory,.htaccess,Http,Redirect,Https,Subdirectory,如何将根域重定向到子文件夹(使用HTTPS),将其他附加域重定向到子文件夹(不使用HTTPS) 目前我在根目录下有一个.htaccess,它用HTTPS重定向到主子文件夹ok。但是我的另一个附加域,比如domain2,也会被重定向到主子文件夹 我想在不使用HTTPS的情况下将domain2重定向到domain2-子文件夹 重新编写引擎打开 重写cond%{HTTPS}=在…上 重写规则^https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301] 重定向匹配^/$/主子

如何将根域重定向到子文件夹(使用HTTPS),将其他附加域重定向到子文件夹(不使用HTTPS)

目前我在根目录下有一个
.htaccess
,它用HTTPS重定向到主子文件夹
ok。但是我的另一个附加域,比如
domain2
,也会被重定向到
主子文件夹

我想在不使用HTTPS的情况下将
domain2
重定向到
domain2-子文件夹

重新编写引擎打开
重写cond%{HTTPS}=在…上
重写规则^https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301]
重定向匹配^/$/主子文件夹/
我不确定这段代码是否正确,因为它可能会让我使用通配符。我在网上搜索得到了这段代码,但是有太多的建议,我现在很困惑


总之:当浏览器中的domain1.co.uk中的用户类型和我的加载项域应转到时,我在root中的主托管帐户应转到。

您可以使用附加的
重写条件来定义特定的重定向:

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
。根据默认情况,这两个条件是
-组合的

为了安全起见,您可能还想添加一些规则,将请求重定向到
https://example.org/host1.example.org-subfolder
特定域名,因为根据您的描述,您的托管帐户中仅限于一个文件树。对
http://test1.example.org/test1.example.org-subfolder/...
删除文字文件夹名称

哦,还有一个警告:以上语法仅适用于
.htaccess
样式文件。如果您有权访问真正的主机配置,那么您应该始终希望将这些规则放在其中。但是,您需要稍微更改语法
.htaccess
风格的规则是出了名的容易出错、难以调试,而且它们确实会降低http服务器的运行速度。它们仅作为无法访问主机配置的用户的最后选项提供

重新编写引擎打开
重写cond%{HTTPS}=在…上
重写cond%{HTTP_HOST}^domain1.co.uk$
重写规则^https://%{HTTP\u HOST}/主子文件夹%{REQUEST\u URI}[L,R=301,QSA]


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

只是更新一下,我以前的解决方案部分有效,因为它几乎没有小问题/bug。于是回到画板上,突然意识到我不必要地太努力了

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

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

我只需在用户界面文本框中输入所有内容,如选择domainname=“domain1”、old folder=“\”、new folder=“”-然后单击创建重定向。这样,它会自动创建一个.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]

“根域”和“附加域”指的是什么?根域是指当您购买主机时,默认的域总是指向cPanel filemanager中的public_html文件夹。附加域是一些其他域,您可以在以后添加到托管帐户,最好指向目录/the-domain2-子文件夹中的索引文件,这样您的托管包中就包含了一个域,并且您购买了其他域?这就是你想要表达的吗?谢谢@arkascha-我现在正试着穿上它!很好的解释-谢谢!好的-我尝试了你的建议,但它在所有域上都给了我错误500。所以我将其调整为最小版本:“RewriteCond%{HTTPS}上的RewriteEngine=在RewriteCond%{HTTP\u HOST}^domain1.co.uk$RewriteRule^https://%{HTTP\u HOST}%{REQUEST\u URI}[L,R=301,QSA]'时,您会得到什么错误?http服务器错误日志文件中写入了什么?错误500是非常模糊的…当然,错误550总是一个“内部服务器错误”,这是http状态500的定义。我的问题是实际错误是什么,您可以在http服务器错误日志文件中读取,而不是在浏览器中的某个位置。所有附加域都使用上述最小行,但唯一的问题是主域1没有重定向到子目录/主子文件夹