2

下午,

是否可以在 htacces 重定向中设置规则,例如http://example.com/portfoliohttp://example.com/index.php#portfolio,而不在浏览器的 URL 字段中显示最后一个地址?

我知道 hast 不会发送到服务器,但必须有某种方法来掩盖这些丑陋的 URL ..

可能与问题相关,但我有以下 jQuery 代码

if(history.pushState){
    history.pushState(null,null,'#'+$(this).attr('class'));
}else{
    location.hash = '#'+$(this).attr('class');}
}

if(window.location.hash){
    var hash = window.location.hash.substring(1);
    if(jQuery.browser.webkit){
        $('html,body').animate({scrollTop:$('#'+hash).offset().top-2*88},'slow');
    }else{
        $('html,body').animate({scrollTop: $('#'+hash).offset().top-3*88-10},'slow');}
    }
}

提前感谢任何解决方案。

4

1 回答 1

2

我知道 hast 不会发送到服务器,但必须有某种方法来掩盖这些丑陋的 URL ..

没有。通过“从浏览器中屏蔽它”,这意味着浏览器不知道它请求的 URL 已在服务器端被破坏。它认为它已请求http://example.com/portfolio,因此这就是它在地址栏中显示的内容。

如果您想从浏览器中隐藏片段,那么#portfolio片段将变得完全无用。浏览器是客户端和服务器之间唯一可以从这样的片段中获得任何用途的实体,它看不到它,因为服务器隐藏了它。对片段的使用为零的服务器正在将其隐藏在浏览器中。如果没有某种框架(隐藏 URL)或一些 javascript 技巧来更改地址栏中的内容,您不能让浏览器加载与地址栏上显示的 URL 不同的 URL。

如果服务器内部重写/portfolio/index.php#portfolio,则片段会立即被丢弃。index.php 的执行并不知道它的存在,因为只有浏览器关心片段。

如果您不希望 URL 中有片段,则应重新设计内容的传递方式。

于 2012-12-18T21:04:20.833 回答