apache - 将 suddomain 重定向到主域

Jea*_*ois 2 mod-rewrite redirect subdomain apache-2.2

我重建了我的旧网站。那个旧站点有一个子域:forum.example.com. 现在,它已经不存在了。使用访问我网站的人forum.example.com应该被重定向到example.com.

我的.htaccess文件:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301] 
Run Code Online (Sandbox Code Playgroud)

如果主机不是example.com,则重定向到example.com。不应该forum.example.com符合条件吗?

现在对于问题的可选部分,如果有人可以向我解释上述规则,那就太好了。

以下是我在上述规则中的理解:

如果主机不是example.com( !^example.com$)
重定向到http://example.com.

我不明白的是规则 regex: 的第一部分^(.*)$,然后是对它的引用 ( $1)。为什么匹配的所有内容都可以作为请求的文件路径?它不会做这样的事情吗?

http://example.com/http://www.example.com/[requested file]
Run Code Online (Sandbox Code Playgroud)

Dav*_*ger 6

RewriteBase / 
RewriteCond %{HTTP_HOST} !^example.com$ [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)

上面的代码查看连接浏览器的 HTTP 主机。请注意,.htaccess 只能处理可以访问网络服务器的请求。这适用于forum.example.com,但前提是forum.example.com实际加载 .htaccess 文件所在目录中的内容。如果您没有设置 DNS 记录(例如,*A 记录或forumA 记录),那么它甚至不会根本不去网站,因为DNS无效。此外,必须设置 Apache 以加载该 VirtualHost 的站点。因此,在 .htaccess 可以按照指定转发 URL 之前,它也必须列在 Apache 配置中。

对于您的第二个问题,在RewriteRule部分中^(.*)$,这仅匹配从服务器访问的文件。该RewriteCond部分仅将规则应用于某些主机名,然后^(.*)$指定任何请求都遵循重写规则。

所以上面的 .htaccess 代码将适用于/if 主机不相等之后的所有请求example.com

如果您需要任何进一步的解释,请告诉我。