2012-11-19 46 views
0

我有这些内容的.htaccess文件:PHP网址分裂#

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ([^/\.]+)$ index.php?string=$1&match=all [L] 

所以,当我键入:domain.com/test 页面重定向到domain.com/index.php?string=测试&匹配=所有

但是,如果我想达到这个页面:domain.com/test#sub1

的页面重定向到domain.com/index.php?string= 测试 &匹配=所有

,而不是domain.com/index.php?string= 测试#SUB1 &匹配=所有

我该如何继续?

+1

哈希不发送到服务器,因此它看到'domain.com/test'不是'domain.com/test#sub1' – Musa

+1

'#'只被浏览器使用,并且不会与HTTP请求一起发送。服务器从来没有看到它。 –

+0

事实上,你只是更快一点:) – Digitalis

回答

1

锚/散列只被浏览器使用。服务器不会看到这些请求,因为这样的请求将是无效的。 (没有“test#sub1”文件,只有一个“测试”文件。)它没有办法知道你只是想访问一个锚点而不想访问一个不存在的文件,所以这样的信息不传递给Web服务器。

编辑:另外,重定向一切通过一个单一的PHP文件,似乎只是对我的弊端。也许这里有一些特别的事情,这使得它成为一个有声望的方法。

+0

这是许多PHP框架使用的常见“前端控制器”模式。 –

+0

嗯..很高兴知道。对我来说这似乎很奇怪,但最近我还没有用过太多的框架。 – coder543