我正在使用一個曾經是靜態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必須對其執行查找。
我猜測答案是重寫的目標是一個文件名而不是一個URL。我想我必須使用[R]。 –
我也嘗試在一個環境中保存錨點var: 'MyPage.php [NC,NE,E = ANCHORITE:$ 1]' –
我可以匹配除#以外的任何url後綴字符,並將其中的後綴一個查詢字符串,如果不是一個新的片段......它看起來很像是在mod_rewrite看到它之前剝離了這個片段。 –