.htaccess 文件中的子域仅适用于索引
Subdomain in .htaccess file only works with index
我的 .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]
所以上面的结果是,如果我的 'public-html'(root?)中有一个 index.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 实用程序来创建子域代码,所以我首先向他们的技术支持寻求帮助。长话短说他们没有。也许我所希望的实际上是不可能的?
此外,我从代码中删除的行与我的托管公司在某个时候添加的名为“well-known/acme-challenge”的内容有关。由于删除它们对我描述的行为没有影响,我将其省略以避免混淆问题。
RewriteRule ^/?$ "http\:\/\/example\.org\/subname\/" [R=301,L]
这只会“重定向”文档根目录。要重定向所有 URL,您需要将上面的内容更改为如下内容:
RewriteRule (.*) http://example.org/subname/ [R=301,L]
</code> 反向引用指的是在 <code>RewriteRule
模式 中捕获的 URL-path,即。 (.*)
.
无需 backslash-escape 替换 字符串中的冒号、斜杠和点(这是 cPanel 的典型做法)。
Also, the lines I deleted' from the code had to do with something called "well-known/acme-challenge", added by my hosting company at some point.
(让我们加密?)SSL 证书 auto-renews 时可能需要这些行。 (尽管上面重定向到“http”——你没有使用 HTTPS 吗?)
更新:
RewriteCond %{HTTP_HOST} ^subname\.example\.org$ [OR]
RewriteCond %{HTTP_HOST} ^www\.subname\.example\.org$
顺便说一句,如果您愿意,可以将这两个条件简化为一个条件。例如,上面相当于:
RewriteCond %{HTTP_HOST} ^(www\.)?subname\.example\.org$
我的 .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]
所以上面的结果是,如果我的 'public-html'(root?)中有一个 index.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 实用程序来创建子域代码,所以我首先向他们的技术支持寻求帮助。长话短说他们没有。也许我所希望的实际上是不可能的?
此外,我从代码中删除的行与我的托管公司在某个时候添加的名为“well-known/acme-challenge”的内容有关。由于删除它们对我描述的行为没有影响,我将其省略以避免混淆问题。
RewriteRule ^/?$ "http\:\/\/example\.org\/subname\/" [R=301,L]
这只会“重定向”文档根目录。要重定向所有 URL,您需要将上面的内容更改为如下内容:
RewriteRule (.*) http://example.org/subname/ [R=301,L]
</code> 反向引用指的是在 <code>RewriteRule
模式 中捕获的 URL-path,即。 (.*)
.
无需 backslash-escape 替换 字符串中的冒号、斜杠和点(这是 cPanel 的典型做法)。
Also, the lines I deleted' from the code had to do with something called "well-known/acme-challenge", added by my hosting company at some point.
(让我们加密?)SSL 证书 auto-renews 时可能需要这些行。 (尽管上面重定向到“http”——你没有使用 HTTPS 吗?)
更新:
RewriteCond %{HTTP_HOST} ^subname\.example\.org$ [OR] RewriteCond %{HTTP_HOST} ^www\.subname\.example\.org$
顺便说一句,如果您愿意,可以将这两个条件简化为一个条件。例如,上面相当于:
RewriteCond %{HTTP_HOST} ^(www\.)?subname\.example\.org$