2012-05-23 192 views
0

我有联系这样的:对待Safari浏览器比其他浏览器的.htaccess不同

www.domain.com/page.php?id=1#info 

我只是想隐藏.php为得到这个:

www.domain.com/page?id=1#info 

出于这个原因,我发现这个脚本的.htaccess:

RewriteEngine叙述上

# to make `/path/index.php` to /path/ 
RewriteCond %{THE_REQUEST} ^GET\s(.*/)index\.php [NC] 
RewriteRule . %1 [NE,R=301,L] 

RewriteCond %{THE_REQUEST} ^GET\s.+\.php [NC] 
RewriteRule ^(.+)\.php$ /$1 [NE,R=301,L,NC] 

RewriteCond %{REQUEST_URI} !\.php$ [NC] 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule . %{REQUEST_URI}.php [L] 

这不正是这份工作,并在所有浏览器的工作原理,除了Safari浏览器,这将输出:

www.domain.com/page?id=1 

的#info不见了。

浏览器如何解释.htaccess不同?有人可以帮我写出正确的.htaccess文件吗?

回答

2

Safari浏览器的行为方式每个浏览器应该:

片段取决于文档的MIME类型,并由 客户(Web浏览器)进行评估。客户端当它们检索文档时并不需要发送 URI片段 到服务器,并且没有来自 本地应用程序(参见下文)的帮助片段不参与HTTP 重定向。

Wikipedia: Fragment identifier

用简单的英语:在#后的URL的一部分,不应该被浏览器发送到服务器。浏览器应该在本地处理。这意味着您在应用重定向时可能会丢失碎片(重写规则)。

+0

好的,这非常有趣,谢谢!但是,在不丢失标识符的情况下处理重写的正确方法是什么? – Melros

+0

这是不可能的。 – Jonathan

+0

我想我可以使用一个规则,它会将没有php的链接解释为带有php结尾的文件,但是因此我会重命名我的页面中的所有链接,我认为这不是正确的方式。或者是? – Melros

相关问题