我重build了我的旧网站。 该旧网站有一个子域名: forum.example.com 。 现在,它不再存在了。 使用forum.example.com访问我的网站的人应该被redirect到example.com 。
我的.htaccess文件:
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^example.com$ [NC] RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
如果主机不是example.com ,则redirect到example.com 。 不应该forum.example.com适合的条件?
现在对于问题的可选部分,如果有人能够向我解释上述规则,那就太好了。
以下是我在上述规则中理解的内容:
如果主机不是example.com ( !^example.com$ )
redirect到http://example.com 。
我不明白的是规则正则expression式的第一部分: ^(.*)$ ,然后是对它的引用( $1 )。 如何匹配所有可以作为请求的文件path? 难道它不会这样吗?
http://example.com/http://www.example.com/[requested file]
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文件所在的目录中。如果您没有设置DNSlogging(例如,a * Alogging或forum Alogging),那么它甚至不会去网站,因为DNS是无效的。 而且,Apache必须设置为加载VirtualHost的站点。 所以它必须在Apacheconfiguration中列出,以及.htaccess可以按照指定转发URL。
对于第二个问题,在RewriteRule部分^(.*)$ ,这只能匹配从服务器访问的文件。 RewriteCond部分只对某些主机名应用规则,然后^(.*)$指定任何请求遵循重写规则。
因此,如果主机不等于example.com则上面的.htaccess代码将适用于/之后的所有请求。
让我知道你是否需要进一步的解释。