我重建了我的旧网站。旧网站有一个子域名: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*
记录或forum
A 记录),那么它根本无法转到该站点,因为 DNS 无效。此外,必须设置 Apache 才能为该 VirtualHost 加载站点。因此,在 .htaccess 可以按指定方式转发 URL 之前,它还必须列在 Apache 配置中。
对于您的第二个问题,在RewriteRule
部分中^(.*)$
,这仅匹配从服务器访问的文件。该RewriteCond
部分仅在某些主机名上应用规则,然后^(.*)$
指定任何请求都遵循重写规则。
/
因此,如果主机不等于,则上述 .htaccess 代码将适用于之后的所有请求example.com
。
如果您需要任何进一步的解释,请告诉我。