我正在使用一个曾经是静态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看到它之前剥离了这个片段。 –