我閱讀了很多類似的主題,但沒有找到正確的答案,所以請幫助我。
假設用戶在我的網頁中輸入了一個不存在的子目錄:
www.example.com/subpage-1
我想要達到的目標:
我希望我的主頁(www.example.com- 實際上是隱藏index.html的)打開,但使用不存在的子頁面(www.example.com/subpage-1)保持 URL 不變。
我需要它的原因:我只有主站點(index.html)的網站,一切都是通過JavaScript動態控制的。
我想介紹子頁面——但我只想用我的主index.html站點和 JS 來控制它。(就像單頁應用程式一樣。)
所以當用戶輸入 URL 時
www.example.com/subpage-1,我的主站點打開了,但是由于 URL 保持不變,JS 腳本可以檢查 URL,看到,subpage-1請求,并為其生成正確的內容(如果subpage-1支持,當然) .
這也可能是一個對 SEO 友好的解決方案,因為我也可以為 Google 提供一個帶有可用子頁面的站點地圖 - 但是一切都將通過相同的index.htmlJS 來控制。
我怎樣才能實作它?
到目前為止我發現了什么:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(. )$ index.html?url=$1 [QSA,L]
我的問題是它每次都打開主頁,我在任何地方都找不到查詢(?url=),所以我不能使用它。
還有一個我不知道如何處理的問題:假設用戶輸入
www.example.com/subpage-1
并且它作業正常,因為我的 JS 腳本處理“subpage-1”。
但是如果
www.example.com/non-existing-subpage
輸入了嗎?使用上面的解決方案,它將再次打開主頁,但 JS 無法為其加載任何內容。對于所有不存在的子頁面,我仍然想要404 。我怎樣才能實作它?
uj5u.com熱心網友回復:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(. )$ index.html?url=$1 [QSA,L]我的問題是它每次都打開主頁,但我在任何地方都找不到查詢 (?url=),所以我無法使用它。
這是服務器上的內部重寫。因此,urlURL 引數(僅在內部重寫時出現)僅適用于服務器端腳本,而不適用于客戶端 JavaScript。瀏覽器/客戶端只能看到來自服務器的回應——它不知道是什么檔案產生了該回應。但是,客戶端 JavaScript 可以看到瀏覽器地址欄中的內容,可以通過window.location物件訪問。
因此,您可以改為簡化RewriteRule指令:
RewriteRule . index.html [L]
window.location.pathname在您的 JS 中,您可以從屬性中讀取請求的 URL 路徑。例如,如果您請求,example.com/foo則該pathname屬性包含/foo(帶有斜杠前綴)供您在腳本中進行相應操作。
對于所有不存在的子頁面,我仍然想要 404。我怎樣才能實作它?
如果您只使用客戶端 JavaScript,則不能。“404 Not Found”狀態是從服務器發送的 HTTP 回應。
您可以在客戶端 JS 中做的最好的事情是向用戶顯示看起來像“404 Not Found”的訊息,并確保您有一個robots阻止索引的元標記。但這仍然提供 200 OK HTTP 狀態。搜索引擎(即 Google)可能會將其視為軟 404(即看起來像 404 的頁面,但提供 200 OK 狀態)。
如果您想提供 404 HTTP 回應狀態,那么服務器需要知道哪些是有效/無效的 URL。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441225.html
標籤:javascript .htaccess 网址 改写 路线
