.htaccess 从中重写哈希URL/
我在这里做了一点研究,发现hashtags是客户端的,不能用.htaccess重写,但我想我正在尝试做的恰恰相反 我使用的是Kirkas.ch中的assensor.js,它允许一个包含不同“部分”(称为楼层)的单页网站显示为单独的部分 结构是这样的:.htaccess 从中重写哈希URL/,.htaccess,mod-rewrite,hashtag,.htaccess,Mod Rewrite,Hashtag,我在这里做了一点研究,发现hashtags是客户端的,不能用.htaccess重写,但我想我正在尝试做的恰恰相反 我使用的是Kirkas.ch中的assensor.js,它允许一个包含不同“部分”(称为楼层)的单页网站显示为单独的部分 结构是这样的: site.com/#/floorname site.com/#/otherfloor site.com/#/andyetanotherfloor 诸如此类 我想做的是制作“永久链接”,这样当有人键入时: site.com/floorname …
site.com/#/floorname
site.com/#/otherfloor
site.com/#/andyetanotherfloor
诸如此类
我想做的是制作“永久链接”,这样当有人键入时:
site.com/floorname
…它将显示“site.com/#/floorname”的内容,但浏览器将显示“site.com/floorname”,而不是带有哈希的url
很抱歉,这很难理解。这可能吗?我在这里读到过hashtag是客户端的,但我想我要做的不是将指向“site.com/#/floorname”的链接重定向到“site.com/floorname”,而是相反
我找到了这个页面:
这表明domain.com/sub/parameter
可以重写为:
domain.com/sub.html#parameter
但我要做的是在没有sub.html页面的情况下重写它,然后使用域,使用以下规则:
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !/ [NC]
RewriteCond %{REQUEST_URI} ^/([^/]+)/? [NC]
RewriteRule .* /#/%1 [R,NE,L]
但它不起作用
有什么建议吗
…它将显示“site.com/#/floorname”的内容,但浏览器将显示“site.com/floorname”,而不是带有哈希的url
不可能。服务器不关心#
片段,浏览器关心。如果浏览器认为它实际上是要/floorname
,而不是/#/floorname
,那么客户端(assensor.js)将无法渲染,因为它看不到片段。您拥有的代码重定向浏览器,使其显示包含片段的URL,这是您必须要做的事情,无法使片段远离客户端并期望客户端正确呈现
但是,您有以下情况:
RewriteCond %{REQUEST_URI} !/ [NC]
将始终失败,因为%{REQUEST\u URI}
变量始终以/
开头,因此该条件将始终为false
请尝试以下方法:
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /#/$1 [L,NE,R]
你可以用一些javascript来实现。下面是一个使用php+javascript的示例,但也可以使用其他语言 /.htaccess /index.php
document.location.hash='/';
.. 处理和检测哈希标记的另一个goes代码如果放低,将正常启动。
您好,这对重定向非常有效,感谢您帮助我了解/故障情况。不过我还有一个问题,有没有办法强制这些文件名使用小写?我发现可以添加重写映射将其转换为小写,但我不知道如何正确实现它。如果你能帮忙,谢谢你。如果没有,谢谢你的回答!事实上,我发现我没有足够的权限重写为小写,所以这个答案足以解决我的问题。谢谢你,乔恩@是的,你需要在vhost或服务器配置中声明一个映射,不能在htaccess中声明。
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
## we hand the fake pages and pass them into the page via querystring
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z\-_]+)$ index.php?load_hash=$1 [L,QSA]
<html><head>
<?php
// then on the page, preferably high in the page, we detect the GET parameter and change the hash via javascript.
if (isset($_GET['load_hash']) && !empty($_GET['load_hash'])) {
?>
<script>
document.location.hash = '/<?php echo $_GET['load_hash'];?>';
</script><noscript>
<a href="#/<?php echo $_GET['load_hash'];?>">Your browser has javascript disabled. Please click here.</a>
</noscript>
<?php
}
?>
</head>
<body>
<script>
.. your other goes code that deals with and detects the hash tag will fire as normal if placed lower.
</script>
</body></html>