如何在浏览器状态栏的链接中隐藏.php扩展名

时间:2017-08-24 14:57:39

标签: php html mod-rewrite url-rewriting

我正在使用.htaccess文件来隐藏网址中的 audit.row() .add("keyspace_name", update.metadata().keyspace) - .add("table_name", update.metadata().table) + .add("table_name", update.metadata().name) .add("primary_key", update.metadata().partitionKeyType.getString(update.partitionKey().getKey())); 扩展名。虽然它工作正常,但我现在还必须在页面上显示的所有链接中隐藏.php文件扩展名。

例如,当我将鼠标悬停在链接上时,其网址会显示状态栏并包含.php扩展名。如何从链接网址中删除.php或者完全隐藏浏览器状态栏中的网址?

我在.htaccess文件中使用以下代码:

.php

(代码最初基于on githubthis answer。)

我的HTML文件中的链接看起来像Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / ## don't touch /forum URIs RewriteRule ^forums/ - [L,NC] ## hide .php extension snippet # To externally redirect /dir/foo.php to /dir/foo RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R,L] # To internally forward /dir/foo to /dir/foo.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*?)/?$ $1.php [L] # To remove www header RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [L,R=301] menu1.php等。当我点击这些链接时,浏览器网址栏中显示的网址看起来像menu2.php,这很好。但是在状态栏中,当我将鼠标悬停在这些链接上时,它仍会显示domain.com/menu1

如何在状态栏中隐藏menu1.php后缀?我是否必须手动更改所有链接中的所有URL,或者我可以通过某种方式隐藏它们?

1 个答案:

答案 0 :(得分:0)

简短回答:是的,您需要修改所有链接,以便从中删除.php扩展名。

您引用的.htaccess文件包含两个(相关)部分,它们执行不同的操作:

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]

当用户的浏览器请求具有.php扩展名的网址时,会触发此RewriteRule。该规则会导致网络服务器使用external redirect回复同一网址,但删除了.php后缀。然后,浏览器将重新尝试使用新网址加载页面,并在地址栏中显示该新网址。

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

然后,第二个RewriteRule会触发包含.php扩展名的网址,但如果扩展名与您网络服务器上的实际.php文件相对应附在他们身上。然后,规则会将.php扩展名重新附加到网址上,然后在您的网络服务器中重试请求 - 但it does so internally,而浏览器无需了解更改。

因此,实际上,浏览器被告知在没有 .php扩展名的情况下显示URL ,但是Web服务器仍然会运行带有扩展名的PHP脚本。

但是,所有这些只发生在用户点击链接后。 .htaccess文件中的URL重写规则不会,也不能神奇地编辑HTML代码以修复其中包含的URL。因此,要实际隐藏您使用PHP的事实,您需要手动编辑HTML(包括PHP脚本本身输出的任何HTML代码),以从URL中删除.php文件扩展名。

(作为一个副作用,这样做也会使上面引用的第一个RewriteRule变得不必要。但是,您可能仍然希望保留它,以便任何仍包含.php扩展名的旧链接URL仍会自动重定向。)