仅将子域的根转发到主域中的文件夹(mod_rewrite)

时间:2012-10-08 15:15:24

标签: mod-rewrite

我认为我在这里误解了一些基本的东西,因为这是我第一次使用mod_rewrite

我想要以下内容:

blog.example.com
blog.example.com/
blog.example.com/index.php

重定向到:

example.com/blog

但是,我希望所有其他案例都无所作为,例如

blog.example.com/foobar
blog.example.com/wp-admin
blog.example.com/wp-admin.php

这是我目前的.htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} =blog.example.com
RewriteCond %{REQUEST_URI} ^|/|index\.php$
RewriteRule ^(.*)$ http://www\.example\.com/blog [QSA,L]

我尝试了很多变种但每次都要求重定向,或者没有重定向,所以mod_rewrite肯定在做某事,而不是我想要的。

我已经通过this post浏览了相关内容,但我认为问题更多的是由于缺乏经验而遗漏了一些微妙的事实。有人会指出我的错误吗?我知道我们不需要另外一个mod_rewrite问题,但我真的在努力解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:1)

试试这个:

RewriteEngine On
RewriteCond %{HTTP_HOST} =blog.example.com [NC]
RewriteRule ^/?(index\.php)?$ http://www.example.com/blog [QSA,R,L]

一些基本要点:

  1. 重写规则的第二部分不是正则表达式,因此句点不需要在那里进行转义。

  2. 我不熟悉RewriteCond的= String选项。谢谢你今天教给我一些东西(当我没有在那里看到正则表达式时我很担心,但那应该没问题)!我会在这里添加[NC],因为它有助于匹配域的小写和大写版本。

  3. 除非您的虚拟主机将blog.example.com子域包含为正确的别名,并且为该子域设置了DNS,否则这些都不会起作用。