使用URL重写来访问静态站点上的菜单项?

时间:2014-08-27 10:10:44

标签: javascript html mod-rewrite

首先,我没有使用CMS或PHP。此站点或多或少是静态的,并且具有顶级index.html。

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

当前由手动直接加载到此菜单项的页面没有特定的URL。通常,当用户点击顶级菜单时,某些JS只显示相关表单,因此用户仍然在http://www.foo.com,例如(实际上,整个站点位于顶级URL ,有很多JavaScript和Ajax做的一切)。这意味着我不能使用简单的重写规则来显示菜单,而且无论如何都不会填写表单的任何部分。

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

  1. 用户点击foo.com/forms/optionN
  2. 等新网址
  3. Apache将此重定向到一个脚本(实际上是C ++),该脚本处理optionN,然后返回index.html的整个修改版本,菜单项显示根据{{填写的表单1}}
  4. 这听起来不错。我真正想做的是将用户发送到未修改的optionN,然后让服务器返回一些JS,它打开菜单项并填写字段。我想我可以将一些JS嵌入到未经修改的foo.com/index.html中。

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

1 个答案:

答案 0 :(得分:0)

显而易见的答案是你的选项(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或配置文件中执行此操作,等等上。