.htaccess 当(.*)为空时停止mod_rewrite返回请求_URI

.htaccess 当(.*)为空时停止mod_rewrite返回请求_URI,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,这是我的htaccess文件的内容 htaccess文件位于托管帐户的根目录中,我只想将目录mocks/site/重定向到新域(有或没有任何额外目录) 如果有人去http://mywebsite.com/mocks/site然后需要重定向到http://thelivewebsite.com。如果他们转到http://mywebsite.com/mocks/site/another/directory然后需要重定向到http://thelivewebsite.com/another/directo

这是我的htaccess文件的内容

htaccess文件位于托管帐户的根目录中,我只想将目录
mocks/site/
重定向到新域(有或没有任何额外目录)

如果有人去
http://mywebsite.com/mocks/site
然后需要重定向到
http://thelivewebsite.com
。如果他们转到
http://mywebsite.com/mocks/site/another/directory
然后需要重定向到
http://thelivewebsite.com/another/directory
。我希望这是有道理的

所以我的问题是,当
mocks/site/
之后有东西时,上面的htaccess代码似乎工作得很好,但是当之后没有东西时,重定向中的
$1
似乎引用了整个请求URI(例如:
mocks/site/
而不是什么都没有,因为它后面什么都没有)

我不知道如何阻止这一切。我考虑过使用RewriteCond,但我不确定在那里使用什么。我找不到任何东西可以帮助我确定
mocks/site/
之后是否有任何内容

任何帮助都将不胜感激


谢谢。

这是非常奇怪的行为——从未见过这样的事。因此,我认为这可能是另外一种情况(在某个地方的另一条规则——在旧的甚至新的网站上)。我建议启用重写调试(
rewriteloglevel9
)并检查重写日志(如果您可以编辑Apache的配置文件/虚拟主机定义,这就是

在任何情况下,尝试以下组合:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^mocks/site/(.*)$ http://thelivewebsite.com/$1 [R=301,L]
它将通过两个步骤进行匹配/重定向:第一个规则是精确的目录匹配(因此根本不涉及
$1
),第二个规则将在
/mocks/site/
后面至少有一个字符时起作用

或者使用
重定向
指令(根本不需要mod_重写):


太棒了,谢谢你,你的第一个建议很有帮助。:)如果后面什么都没有,它会首先重定向。重定向指令似乎没有做任何事情,所以我可能是做错了,但没关系,第一个可以正常工作。
Options +FollowSymLinks
RewriteEngine On

RewriteRule ^mocks/site/$ http://thelivewebsite.com/ [R=301,L]
RewriteRule ^mocks/site/(.+)$ http://thelivewebsite.com/$1 [R=301,L]
Redirect 301 /mocks/site/ http://thelivewebsite.com/