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/
之后是否有任何内容的东西。
非常感谢任何帮助。
谢谢。
答案 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/