htaccess重定向域根,但不是/ #AnchorName

时间:2014-01-24 06:10:58

标签: php apache .htaccess mod-rewrite redirect



我正在拼命想弄清楚如何仅重定向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]

谢谢,

詹姆斯

2 个答案:

答案 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>