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

Mod rewrite 仅将子域的根目录转发到主域中的文件夹(mod_rewrite),mod-rewrite,Mod Rewrite,我想我误解了一些基本的东西,因为这是我第一次使用mod\u 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 这是我当前的.htacces

我想我误解了一些基本的东西,因为这是我第一次使用
mod\u 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
肯定在做一些事情,而不是我想要的

我已经略读了所有相关的内容,但我认为问题更多的是,由于缺乏经验,我遗漏了一些微妙的事实。有人能指出我的错误吗?我知道我们不需要再问另一个
mod_rewrite
问题,但我真的很难回答这个问题。提前感谢。

试试这个:

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

  • 重写规则的第二部分不是正则表达式,因此不需要在其中转义句点

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

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


  • 您发布的是“所有重定向”或“无重定向”?@Nelson-上述示例的所有请求重定向:(编辑的答案以反映=String是一种有效的重写形式,有效!对您的观点的响应。(1)理解,谢谢。(2)事实上,我认为
    =
    不包含文字(非正则表达式)匹配。我至少可以使用
    =blog.globalcitizenstavel.com
    好的。(3)我不知道如何检查这个,但它可以工作!谢谢你的提示。哦,你在我输入评论时编辑了你的答案。我不知道
    [NC]
    ,所以也谢谢你!