【问题标题】:Adding a # symbol and redirecting to a url using htaccess添加 # 符号并使用 htaccess 重定向到 url
【发布时间】:2022-02-04 23:22:32
【问题描述】:

我正在尝试使用 .htaccess 重写我网站上的 URL,但到目前为止还没有运气。我想在 URL 中添加一个哈希并重定向。

我想获取 URL 中的最后一个文件并将其重定向到相同的 URL,但在最后一个文件之前附加一个 # 符号。我想这样做的原因是为了我的网站,所有内容都是动态加载的,无需刷新页面。

例如, www.example.com/foo 将变为 www.example.com/#foo

www.example.com/form/bar.php 将变为 www.example.com/form/#bar.php

我不介意每页是否需要一个条目,我尝试了很多变体,但到目前为止没有任何效果。

RewriteRule ^(.*)foo(.*)$ $1#foo$2 [R=301,L]

RewriteRule ^(.*)/(.*)$ /$1#$2 [L,R=301,NE]

【问题讨论】:

  • 试试:RewriteRule ^foo/?$ /#$0 [L,NE,R=301,NC]
  • 这种工作,但它用#foo 替换了所有内容。所以我的本地实例localhost/mywebsite/foo 变成了localhost/#foo
  • 好的,我会编辑以使其更清晰

标签: regex apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

在您的 .htaccess 中使用这种方式:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*/)([^/]+/?)$
RewriteRule ^ %1#%2 [L,NE,R=301]

关于RewriteCond %{REQUEST_URI} ^(.*/)([^/]+/?)$的说明:

我们在正则表达式中使用了 2 个捕获组:

  • (.*/):匹配上一个之前的最长匹配 / 稍后表示为 %1
  • ([^/]+/?):匹配 URI 的最后一个组件,稍后表示为 %2

在目标中,我们使用%1#%2 在两个反向引用之间放置#

【讨论】:

  • 您能简要解释一下这是如何工作的吗?
  • 是的,有问题添加了它
【解决方案2】:

这样的……

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/* /#$1 [NC]

【讨论】:

  • 不幸的是,这里有一些错误,例如... 模式 ^/* 永远不会匹配,$1 反向引用总是空的,@ 987654324@ 将在响应中进行 URL 编码(如果这是“重定向”),这不是重定向(它需要是 JS 处理响应的外部重定向)等等。
  • 谁支持这个?!
  • ^/* 匹配且 $1 不总是空的,我在发布之前测试了它
猜你喜欢
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多