【问题标题】:How to rewrite a jump link with htaccess如何用 htaccess 重写跳转链接
【发布时间】:2015-02-04 23:28:07
【问题描述】:

我目前在我的 htaccess 文件中进行了重写,需要考虑跳转链接。

我认为我遇到的问题是“#”一直被识别为评论。

我在这里看到了建议使用 [NE] 或 [R] 标志的问题,但要么我没有正确使用它们,要么它们没有做我需要的事情。

我目前的工作重写是:

RewriteRule ^news/([^/]*)/([^/]*)/*$ display_news.php?yid=$1&mid=$2 [L]

我的想法是在 url 的末尾添加另一个片段,如下所示:

RewriteRule ^news/([^/]*)/([^/]*)/1/*$ display_news.php?yid=$1&mid=$2#jumplink [L]

通过使用 [NE] 和 [R] 标志,我将 ? 替换为 3F 并将 $ 替换为 24 用于由 http://www.asciitable.com/ 给出的十六进制代码。我是否必须用特殊括号或其他东西将这些代码括起来? Apache 怎么会知道我的意思不是 3F24

当我尝试将这些十六进制代码放在我的文件中时的当前行为,我得到了内部服务器错误。

如果有更优雅的方法来解释 htaccess 文件中的跳转链接,我会全力以赴。

编辑:

这里建议的是我所期望的示例 URL。

http://website.com/news/2013/11 将映射到 display_news.php?yid=2013&mid=11

http://website.com/news/2013/11/1 将映射到 display_news.php?yid=2013&mid=11#jumplink

但我希望地址保持http://website.com/news/2013/11/1 的格式,并且只映射到页面。

【问题讨论】:

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


    【解决方案1】:

    这应该可行:

    RewriteRule ^news/([^/]*)/([^/]*)/1/?$ /display_news.php?yid=$1&mid=$2#jumplink [L,NC,QSA,NE,R=302]
    

    我建议您提供要匹配的 URI 示例以及您的目标 URI 是什么。

    【讨论】:

    • 以上似乎将服务器路径附加到我的站点的域并更改了网址栏中的地址。类似http://website.com/var/www/website.com/display_news.php?yid=2013&mid=09#revisit
    • 好的,所以[R=302] 显示我的 URL 正是我想要的。出于某种原因,它似乎没有跳转到我拥有<a id="jumplink"></a> 的页面部分。不过,这可能超出了我原来的问题范围。
    • 我相信如果页面正确定义了jumplink 标签,那么该部分应该会自动向上滚动。
    【解决方案2】:

    您重写的 URI 的 #jumplink 部分对服务器来说完全没有意义。 URL 片段(#jumplink 部分)由浏览器和在浏览器上运行的 javascript 使用。它甚至没有传递给 php。

    您可以尝试添加 R 标志以从外部重定向浏览器,但我猜这不是您想要的。

    【讨论】:

    • 是的,我只是想跳到页面的某个部分。我根本不想通过服务器端代码访问#jumplink
    • @d.lanza38 那么你将不得不在浏览器端做一些事情。也许使用一些javascript来查看位置是什么,如果它缺少#然后添加它。
    • 那么我可能会遗漏一些东西,当 #jumplink 附加到 URL 时,浏览器不是天生就支持它的功能吗? Mod重写我知道如果你有一个带有id="jumplink"的锚标签,并且你将#jumplink附加到URL,它会自动将页面加载到该锚标签所在的位置。我只是想这样做,但我不知道如何覆盖 htaccess 文件中 # 的默认行为(这是一个注释)。看起来简单的\# 并不能解决问题。
    • @d.lanza38 当你使用 rewrites 时,服务器上的 URL only 改变了,浏览器仍然认为它看到了/news/blah/blah/1/。它甚至不知道片段在那里。在服务器端,服务器甚至不关心片段,它没有用,所以内部重写对片段没有任何作用。此外,htaccess cmets 仅在 # 位于行首时。
    • 啊,这就解释了为什么在成功将 URL 重写为我想要的内容后,我没有得到预期的结果。数字,我尝试做一些快速而肮脏的事情,这就是我得到的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多