2011-08-18 113 views
0
Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^mocks/site/(.*)$ http://thelivewebsite.com/$1 [R=301,L] 

这是我的htaccess文件的内容。当(。*)为空时停止mod_rewrite返回REQUEST_URI

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

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

所以我的问题是,上面的代码htaccess的看来,然后在重定向的$1似乎引用整个REQUEST_URI后mocks/site/后,工作得很好,当有一些然而,当有不是(如:而不是什么 - 因为它后面什么也没有)。

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

任何帮助将不胜感激。

谢谢。

回答

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] 

它会做配套/ 2个步骤重定向:第一条规则是精确匹配目录(所以没有$1在所有涉及)和2将工作如果在/mocks/site/之后至少有1个字符。

或者(Apache的文档甚至建议这个)使用Redirect指令(在所有for such simple redirects不需要mod_rewrite的):

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

辉煌,谢谢你,你的第一个建议帮助。 :)如果之后没有任何东西,它会先重定向。重定向指令似乎没有做任何事情,所以我可能做错了,但它确定第一个工作正常。 –

相关问题