2015-10-03 56 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可以迭代给定页面上已知的旧锚点列表,并发出条件将它们发送到新页面。

相关问题