我正在拼命想弄清楚如何仅重定向root,而不是在斜线/(包括锚点#)之后重定向(字面上)任何东西。
我有一个登陆页面我想重定向所有domainname.com流量,但也需要让人们通过使用domainname.com/store,domainname.com/#about或domainname.com等深层链接进入主站点/#up(主页面和导航使用锚点)
我正在使用的代码如下,结果如下:
- 重定向domainname.com> landingpage.domainname.com(GOOD)
- 不重定向domainname.com/store(GOOD)
- 重定向domainname.com/#about> landingpage.domainname.com/#about(不好 - 这就是问题)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?domainname\.com [NC]
RewriteRule ^$ http://landingpage.domainname.com [L,NC,R=301]
谢谢,
詹姆斯
答案 0 :(得分:0)
詹姆斯
您是否可以选择将资源从domain.com/store删除到sub.domain.com/store?看起来你会做大量的重定向,随着时间的推移会变得笨拙。
无论如何,我只会重写domain.com请求,并将所有其他请求保留下来。
RewriteEngine On
RewriteCond%{HTTP_HOST} ^ http://www.example.com [NC]
RewriteRule ^(。*)$ http://sub.example.com/ $ 1 [R = 301,L]
答案 1 :(得分:0)
您不能使用htaccess执行此操作,因为URL 的#about
部分永远不会发送到服务器,如果它从未发送到服务器,则所有apache和mod_rewrite看到的是/
,没有#about
。 #about
是一个URL片段,严格保留在浏览器端。使用mod_rewrite无法阻止此重定向。
因此,您必须编写javascript来进行重定向,并删除htaccess文件中的重定向。
<script language=”javascript” type=”text/javascript”>
if(window.location.hostname != "landingpage.domainname.com" && // check that hostname isn't landingpage
!window.location.hash && // check that there is no fragment
window.location.pathname == "/") {
window.location = "http://landingpage.domainname.com/";
}
</script>