【问题标题】:How to hide .php extension in links from browser status bar如何在浏览器状态栏的链接中隐藏 .php 扩展名
【发布时间】:2017-09-15 04:37:59
【问题描述】:

我正在使用 .htaccess 文件来隐藏 URL 中的 .php 扩展名。虽然它工作正常,但我现在还必须在页面上显示的所有链接中隐藏 .php 文件扩展名。

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

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

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]

(代码最初基于this answeranubhava。)

我的 HTML 文件中的链接看起来像 menu1.phpmenu2.php 等。当我单击这些链接时,浏览器 URL 栏中显示的 URL 看起来像 domain.com/menu1,这很好。但是在状态栏中,当我将鼠标悬停在这些链接上时,它仍然显示menu1.php

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

【问题讨论】:

  • 对此不确定,但只需删除 中的 .php
  • 显示代码或任何输出超链接的位置。
  • 是的,让我们看看代码

标签: php html mod-rewrite url-rewriting


【解决方案1】:

简短回答:是的,您确实需要编辑所有链接以从中删除 .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 扩展名的 URL 时,会触发此 RewriteRule。该规则使网络服务器以 external redirect 响应相同的 URL,但删除了 .php 后缀。然后,浏览器将使用新 URL 重新尝试加载页面,并且还会在地址栏中显示该新 URL。

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

第二个 RewriteRule 然后在 包含 .php 扩展名的 URL 上触发,但如果将扩展名附加到它们,它将对应于您的网络服务器上的实际 .php 文件。然后,该规则将 .php 扩展附加回 URL 并重试请求 - 但 it does so internally 在您的网络服务器中,浏览器不知道更改。

因此,实际上,浏览器被告知显示 URL没有.php 扩展名,但网络服务器最终仍会运行带有扩展名的 PHP 脚本。

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

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

【讨论】:

  • 这肯定应该有更多的赞成票
猜你喜欢
  • 2011-05-17
  • 2018-02-16
  • 2020-12-26
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多