我在这里进行了一些研究,发现主题标签是客户端的,无法使用.htaccess重写,但我认为我要做的就是反对...
我使用的是来自Kirkas.ch的Ascensor.js,它允许单页网站将不同的“部分”称为楼层,以显示为单独的部分。
结构如此:
site.com/#/floorname
site.com/#/otherfloor
site.com/#/andyetanotherfloor
等等。
我想做的是制作“永久链接”,以便当有人输入时:
site.com/floorname
...它将显示“site.com/#/floorname”的内容,但浏览器将显示“site.com/floorname”而不是带有哈希的网址。
很抱歉,如果这很难理解。这可能吗?我在这里读到主题标签是客户端的,但我认为我要做的不是将“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]
但它不起作用。
有什么建议吗?
答案 0 :(得分:3)
...它将显示“site.com/#/floorname”的内容,但浏览器将显示“site.com/floorname”而不是带有哈希的网址。
不可能。服务器不关心浏览器的#
片段。如果浏览器认为它实际上是/floorname
而不是/#/floorname
,则客户端(Ascensor.js)将无法呈现,因为它看不到片段。您拥有的代码重定向浏览器,以便显示包含片段的URL,这是您必须要做的事情,没有办法让片段远离客户端并期望客户端正确呈现。
但是,你有这种情况:
RewriteCond %{REQUEST_URI} !/ [NC]
将始终失败,因为%{REQUEST_URI}
变量始终以/
开头,因此该条件始终为false。
请改为尝试:
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /#/$1 [L,NE,R]
答案 1 :(得分:0)
你可以用一些javascript做到这一点。这是一个使用php + javascript的例子,但它可以用其他语言完成。
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>