2014-08-27 66 views
1

首先,我沒有使用CMS或PHP。該網站或多或少是靜態的,並且具有頂級index.html。使用URL重寫訪問靜態網站上的菜單項?

我的問題是,有些用戶必須經過多個步驟才能到達顯示錶單的特定菜單項,並且我想給他們一個URL直接執行此操作,並填寫一些爲他們的箱子。

手動加載的頁面直接進入此菜單項沒有特定的URL。通常,當用戶點擊頂級菜單時,一些JS只是顯示相關表單,因此用戶仍然在http://www.foo.com,例如(實際上,整個網站位於頂級網址,有很多JavaScript和Ajax做一切)。這意味着我不能使用簡單的重寫規則來顯示菜單,並且不會填寫任何形式的任何部分。

有關如何做到這一點的任何想法?我可以在那一刻想到的唯一的選擇是:

  1. 用戶點擊像foo.com/forms/optionN一個新的URL
  2. Apache的重定向這一個腳本(實際上是C++),該處理optionN,並隨後返回一個整修改後的版本index.html,與菜單項顯示到optionN

這聽起來像一個壞主意填寫根據形式。我真正想做的是將用戶發送到未修改的foo.com/index.html,然後讓服務器返回一些打開菜單項並填寫字段的JS。我想我可以在一個未經修改的index.html中嵌入一些JS。

任何想法如何正確地做到這一點? CMS如Joomla或WordPress如何做到這一點?

回答

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或配置文件中執行此操作,依此類推。