我正在使用一个曾经是静态html的网站(由离线工具生成)并将其转换为PHP。我将所有页面网址发送到一个解析网址的PHP文件。起初我只是将FallbackResource MyPage.php
卡在.htaccess文件中,它工作得很好......除了带有片段部分的网址。许多旧网址都像/some-page.html#part2
,在新方案中,part2是一个完整的单独页面,所以我不能忽略网址的那一部分。使用FallbackResource,MyPage.php将看到的所有内容都是/some-page.html
。
现在我已经在这里阅读了关于这个主题的一些其他问题,例如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 :(得分:0)
嗯,我想答案是它无法完成。片段部分甚至从未作为HTTP请求的一部分发送到服务器。它保留在浏览器中。这意味着,如果有人保存了旧链接,那么它就会转到错误的页面,而这就是它的全部内容。
但是我可以在页面中编写javascript来从客户端重定向。 PHP可以迭代给定页面上已知的旧锚点列表,并发出条件将它们发送到新页面。