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)
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 记录或forum
A 记录),那么它甚至不会根本不去网站,因为DNS无效。此外,必须设置 Apache 以加载该 VirtualHost 的站点。因此,在 .htaccess 可以按照指定转发 URL 之前,它也必须列在 Apache 配置中。
对于您的第二个问题,在RewriteRule
部分中^(.*)$
,这仅匹配从服务器访问的文件。该RewriteCond
部分仅将规则应用于某些主机名,然后^(.*)$
指定任何请求都遵循重写规则。
所以上面的 .htaccess 代码将适用于/
if 主机不相等之后的所有请求example.com
。
如果您需要任何进一步的解释,请告诉我。
归档时间: |
|
查看次数: |
1856 次 |
最近记录: |