2015-10-03 61 views
0

我正在使用一個曾經是靜態html(由離線工具生成)並將其轉換爲PHP的網站。我將所有網頁網址發送到解析網址的單個PHP文件。起初,我只是在.htaccess文件中卡住了FallbackResource MyPage.php,並且它工作正常...除了具有片段部分的網址。許多舊網址與/some-page.html#part2相似,在新方案中,第2部分是一個完整的單獨頁面,因此我無法忽略該部分網址。通過FallbackResource,MyPage.php所能看到的全部是/some-page.html如何使用mod_rewrite並保存url的片段(錨點部分)?

現在我已經閱讀了關於此主題的其他一些問題,如this one,並且似乎很清楚,mod_rewrite理論上應該能夠完成這項工作,但我無法完成工作。這是我最近的嘗試:

Options +Indexes 
DirectoryIndex MyPage.php 
RewriteEngine on 
#RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^[^:/.?#&]+\.html#(\w+) MyPage.php#$1 [NC,NE] 
RewriteRule ^[^:/.?#&]+\.(html|php) MyPage.php  [NC] 

這適用於除錨點之外的所有內容。它的工作原理並不比舊的FallbackResource命令更好。我嘗試過以隨機的方式來玩弄這些東西的各個部分,比如尋找%23而不是#,省略NE標誌,將值傳遞給查詢字符串而不是片段,以及什麼都不是。

我會注意到,我不想使用重定向來轉換網址--PHP必須對其執行查找。

+0

我猜測答案是重寫的目標是一個文件名而不是一個URL。我想我必須使用[R]。 –

+0

我也嘗試在一個環境中保存錨點var: 'MyPage.php [NC,NE,E = ANCHORITE:$ 1]' –

+0

我可以匹配除#以外的任何url後綴字符,並將其中的後綴一個查詢字符串,如果不是一個新的片段......它看起來很像是在mod_rewrite看到它之前剝離了這個片段。 –

回答

0

嗯,我想答案是它不能完成。片段部分甚至不會作爲HTTP請求的一部分發送到服務器。它保持在瀏覽器內。這意味着如果任何人保存了舊的鏈接,它只會去錯誤的頁面,這就是它的一切。

但我可以寫JavaScript到頁面重定向從客戶端。 PHP可以迭代給定頁面上已知的舊錨點列表,併發出條件將它們發送到新頁面。

相關問題