首先,我没有使用CMS或PHP。此站点或多或少是静态的,并且具有顶级index.html。
我的问题是,有些用户必须经过多个步骤才能找到显示表单的特定菜单项,我想给他们一个直接执行此操作的URL,并填写一些框对他们来说。
当前由手动直接加载到此菜单项的页面没有特定的URL。通常,当用户点击顶级菜单时,某些JS只显示相关表单,因此用户仍然在http://www.foo.com
,例如(实际上,整个站点位于顶级URL ,有很多JavaScript和Ajax做的一切)。这意味着我不能使用简单的重写规则来显示菜单,而且无论如何都不会填写表单的任何部分。
关于如何做到这一点的任何想法?我现在唯一能想到的选择是:
foo.com/forms/optionN
optionN
,然后返回index.html
的整个修改版本,菜单项显示根据{{填写的表单1}} 这听起来不错。我真正想做的是将用户发送到未修改的optionN
,然后让服务器返回一些JS,它打开菜单项并填写字段。我想我可以将一些JS嵌入到未经修改的foo.com/index.html
中。
任何想法如何正确地做到这一点?像Joomla或WordPress这样的CMS如何做到这一点?
答案 0 :(得分:0)
显而易见的答案是你的选项(2),它几乎就是CMS将为你做的 - 解析HTTP / GET QUERY_STRING,并生成特定于QUERY_STRING的内容。
如果你不能这样做并希望保持你的HTML静态,那么这应该有用,但并不完美。
首先,您的HTML / JS需要了解foo.com?path1=forms&path2=optionN
。
这很简单 - JavaScript必须阅读window.location
并解析它。有一个例子here。然后,您可以使用path1
和path2
的值打开菜单,或其他任何内容。
其次,您必须安排服务器将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
或配置文件中执行此操作,等等上。