当(。*)为空时,停止mod_rewrite返回REQUEST_URI

时间:2011-08-18 09:22:50

标签: .htaccess mod-rewrite

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^mocks/site/(.*)$ http://thelivewebsite.com/$1 [R=301,L]

这是我的htaccess文件的内容。

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

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

所以我遇到的问题是上面的htaccess代码在mocks/site/之后有什么东西看起来效果很好但是当之后没有东西时,重定向中的$1似乎引用整个REQUEST_URI(例如:mocks/site/而不是什么 - 因为之后什么也没有。)

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

非常感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

这是非常奇怪的行为 - 从未见过这样的事情。因此,我认为它可能是其他东西(另一个规则 - 在旧网站甚至新网站上)。我建议启用重写调试(RewriteLogLevel 9)并检查重写日志(如果你能编辑Apache的配置文件/虚拟主机定义,那就是)。

无论如何,尝试这种组合

Options +FollowSymLinks
RewriteEngine On

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

它将分两步进行匹配/重定向:第一个规则用于精确目录匹配(因此根本不涉及$1)如果/mocks/site/之后至少有一个字符,则第二个规则将起作用

或者(Apache文档甚至推荐这个)使用Redirect指令(根本不需要mod_rewrite){/ p>

Redirect 301 /mocks/site/ http://thelivewebsite.com/