Home  >  Article  >  Backend Development  >  How to use PHP to hide URLs

How to use PHP to hide URLs

PHPz
PHPzOriginal
2023-04-04 10:39:361723browse

在 web 开发中,我们经常需要隐藏网址中的参数或者文件路径。这种做法既可以保护网站的安全性,也可以美化网站的 URL。那么,如何使用 PHP 做到网址隐藏呢?

一、使用 mod_rewrite 重写规则

mod_rewrite 是 Apache HTTP 服务器中的一个模块,它可以重写 URL。通过重写规则,我们可以将 URL 中的参数或者文件路径进行隐藏。使用 mod_rewrite 做法如下:

  1. 在 Apache 的配置文件中启用 mod_rewrite。
LoadModule rewrite_module modules/mod_rewrite.so
  1. 编写重写规则。

重写规则需要在 .htaccess 文件中定义,例如:

RewriteEngine On

# 如果请求的不是文件或目录,则做以下处理
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 将以 /article/ 开头的请求重写为 article.php?id=xxx
RewriteRule ^article/(.*)$ article.php?id=$1 [L,QSA]

上述规则中,%{REQUEST_FILENAME} 表示请求的文件名和路径。如果请求的不是文件或目录,则进入重写规则。RewriteRule 语法中 ^article/(.*)$ 表示匹配以 /article/ 开头的 URL,$1 表示取出匹配规则中括号里的内容,将其重写为 article.php?id=xxx,并且加上 [L,QSA],表示停止其它规则的检查,不改变 URL 请求标记。

二、使用隐藏的文件夹,避免 URL 暴露

我们可以建立一个被 Apache 忽略的文件夹,如 /library,然后将所有需要隐藏的文件放在其中,通过 Apache 的 rewrite 规则指向该文件夹。

  1. 获取请求的 URL 是否在 /library 文件夹中存在,是则停止重写,否则重写如下:
# 如果文件不存在,则从 /library 文件夹中获取请求的文件
RewriteCond %{DOCUMENT_ROOT}/library%{REQUEST_URI} -f
RewriteRule ^(.*)$ /library/$1 [L]
  1. 如果请求的文件不在 /library 文件夹中,则重写为 PHP 脚本。
# 如果目标文件是 PHP 脚本,则重写为脚本路径
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)$ /$1.php [L]

三、使用 Base64 编码隐藏 URL

将 URL 中的参数用 Base64 编码,此做法虽然不能完全隐藏 URL,但是可以使其对普通用户不可读。例如:

<a href="index.php?action=<?php echo base64_encode(&#39;login&#39;) ?>">Login</a>

将参数 login 用 Base64 编码后,URL 如下:

index.php?action=bG9naW4=

在 PHP 中使用如下代码解码:

$action = base64_decode($_GET['action']);

综上所述,网址隐藏对于 Web 安全来说至关重要。以上三种方式使用了不同的技术和工具,需要根据具体业务需求和技术实现的难度来选择。

The above is the detailed content of How to use PHP to hide URLs. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn