【问题标题】:Using URL rewrite to access menu item on a static site?使用 URL 重写访问静态站点上的菜单项?
【发布时间】:2014-10-20 20:58:56
【问题描述】:

首先,我没有使用 CMS 或 PHP。这个网站或多或少是静态的,并且有一个顶级 index.html。

我的问题是一些用户必须经过多个步骤才能到达显示表单的特定菜单项,我想给他们一个 URL 直接执行此操作,并填写一些框给他们。

当前由手动直接加载到该菜单项的页面没有特定的 URL。正常情况下,当用户点击顶层菜单时,有的JS只是简单的展示了相关的表单,所以用户还是在http://www.foo.com,比如(其实整个站点都在顶层的URL,用大量的 JavaScript 和 Ajax 无所不能)。这意味着我不能使用简单的重写规则来显示菜单,并且无论如何也不会填写表单的任何部分。

关于如何做到这一点的任何想法?目前我能想到的唯一选择是:

  1. 用户点击了一个新的 URL,比如foo.com/forms/optionN
  2. Apache 将此重定向到处理optionN 的脚本(实际上是C++),然后返回index.html 的完整修改版本,菜单项显示根据optionN 填写的表格

这听起来是个坏主意。我真正想做的是将用户发送到未修改的foo.com/index.html,然后服务器返回一些打开菜单项并填写字段的 JS。我想我可以在未经修改的index.html 中嵌入一些 JS。

任何想法如何正确地做到这一点?像 Joomla 或 WordPress 这样的 CMS 如何做到这一点?

【问题讨论】:

    标签: javascript html mod-rewrite


    【解决方案1】:

    显而易见的答案是您的选项 (2),这几乎就是 CMS 将为您做的事情 - 解析 HTTP/GET QUERY_STRING,并生成特定于 QUERY_STRING 的内容。

    如果您不能这样做并且想要保持 HTML 静态,那么这应该可以工作,但并不完美。

    首先,您的 HTML/JS 需要了解 foo.com?path1=forms&path2=optionN

    这很简单——JavaScript 必须读取window.location 并解析它。有一个例子here。然后,您可以使用 path1path2 的值来打开您的菜单或其他任何内容。

    其次,你要安排服务器把foo.com/forms/optionN/变成foo.com?path1=forms&path2=optionN返回给客户端。这比看起来更难,因为这样的重写:

    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/?path2=$2&path3=$3
    

    只对服务器可见。如果你这样做,客户仍然会认为它在foo.com/forms/optionN/,这就是你会在window.location 中找到的,这是不好的。要解决此问题,您必须进行重定向:

    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/?path2=$2&path3=$3 [R]
    

    服务器现在显式地向客户端发送一个重定向,然后客户端使用正确的 URI (foo.com?path1=forms&path2=optionN) 执行 GET,客户端会看到“正确的”window.location。不幸的是,客户端的地址栏也更改为显示重定向 URI,这不是很好,但至少可以工作。

    您必须为您的设置修改RewriteRule - 被替换的路径取决于您的DOCUMENT_ROOT,以及您是在.htaccess 还是配置文件中执行此操作,等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 2017-10-03
      • 2022-08-16
      • 2011-11-19
      • 2012-11-26
      相关资源
      最近更新 更多