首页 > 解决方案 > .htaccess 文件中的子域仅适用于索引

问题描述

我在我的 中有一个子域设置.htaccess,它似乎只适用于默认index.html页面。我希望它适用于与子域对应的文件夹中的任何页面。为保护隐私而编辑,假设我的域是example.org. 文件的相关部分如下所示......

#subdomain 
RewriteCond %{HTTP_HOST} ^subname\.example\.org$ [OR]
RewriteCond %{HTTP_HOST} ^www\.subname\.example\.org$
# (a few lines added by my hosting company deleted -- see below)
RewriteRule ^/?$ "http\:\/\/example\.org\/subname\/" [R=301,L]

所以上面的结果是,如果我的index.html“public-html”(根?)中有一个页面,http://example.org并且在子文件夹中存储了一个不同的页面index.html(与子域同名),我会得到这个预期的结果,这有效...

浏览至:http://example.org 查看结果http:// example.org/index.html
浏览至:http://subname.example.org查看结果http:// example.org/subname/index.html

到目前为止很棒。这是我创建域名时所期望的。myfile.html但是,鉴于文件夹中存储了一个特定文件subname,我希望这也能工作,但它不会......

浏览至:http://subname.example.org/myfile.html导致 404 错误。

尽管事实上浏览到http://example.org/subname/myfile.html工作正常。在这种情况下myfile.html显示。那么我可以做些什么来修改子域代码以获得我正在寻找的结果?即,无论“ANYFILE”是什么,浏览到http://subname.example.org/ANYFILE应该和浏览到一样有效。http://example.org/subname/ANYFILE毕竟,这是我开始设置子域的主要原因之一!

注意:我承认我依靠托管公司的 cPanel 实用程序来创建子域代码,所以我首先向他们的技术支持寻求帮助。长话短说他们没有。也许我所希望的实际上是不可能的?

此外,我从代码中删除的行与我的托管公司在某个时候添加的名为“众所周知/acme-challenge”的东西有关。由于删除它们对我所描述的行为没有影响,因此我将其省略以避免混淆问题。

标签: .htaccesssubdomain

解决方案


RewriteRule ^/?$ "http\:\/\/example\.org\/subname\/" [R=301,L]

这只会“重定向”文档根目录。要重定向所有 URL,您需要将上面的内容更改为:

RewriteRule (.*) http://example.org/subname/$1 [R=301,L]

$1反向引用是指在RewriteRule pattern中捕获的URL 路径,即。(.*).

无需对替换字符串中的冒号、斜杠和点进行反斜杠转义(这是 cPanel 的典型特征)。

此外,我从代码中删除的行与我的托管公司在某个时候添加的名为“众所周知/acme-challenge”的东西有关。

当(让我们加密?)SSL 证书自动更新时,可能需要这些行。(虽然上面重定向到“http” - 你没有使用 HTTPS 吗?)


更新:

RewriteCond %{HTTP_HOST} ^subname\.example\.org$ [OR]
RewriteCond %{HTTP_HOST} ^www\.subname\.example\.org$

顺便说一句,如果您愿意,这两个条件可以简化为一个条件。例如,上面等价于:

RewriteCond %{HTTP_HOST} ^(www\.)?subname\.example\.org$

推荐阅读