0

我有这样的链接:

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

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

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

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

重写引擎开启

# 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 文件吗?

4

1 回答 1

2

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

片段取决于文档 MIME 类型并由客户端(Web 浏览器)评估。客户端在检索文档时不应该向服务器发送URI 片段,并且如果没有本地应用程序(见下文)的帮助,片段不会参与 HTTP 重定向。

维基百科:片段标识符

简而言之:#浏览器不应该将 URL 之后的部分发送到服务器。浏览器应该在本地处理这个。这意味着您在应用重定向(重写规则)时可能会丢失片段。

于 2012-05-23T22:57:23.080 回答