apache-将suddomain重定向到主域

apache-将suddomain重定向到主域

我重建了我的旧网站。旧网站有一个子域名: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] 

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

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

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

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

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

http://example.com/http://www.example.com/[requested file]

答案1

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

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

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

/因此,如果主机不等于,则上述 .htaccess 代码将适用于之后的所有请求example.com

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

相关内容