用户访问时隐藏/隐藏URL

时间:2019-01-03 23:26:33

标签: php url browser

我希望将网站的页面存储在专用目录中,以使其更易于管理,并将处理程序存储在页面旁边,但是我不希望用户在访问这些页面时看到目录结构。 / p>

例如如果页面存储在https://mywebsite.com/faq/faq.php中,并且用户访问了此页面,我希望他们看到https://mywebsite.com/faq.php

是否可以屏蔽URL或隐藏内部文件结构?我宁愿在PHP或服务器端执行此操作,以免在客户端可见任何此掩蔽

我尝试使用其他SO问题来调查此问题,但似乎没有给出我需要的答案。我已经找到了使用.htaccess的答案,但这似乎只允许拒绝用户访问某些区域。

我也研究了个性网址,但该网址在重定向后仍会更改

2 个答案:

答案 0 :(得分:2)

.htaccess是使用RewriteRule最快,最简单的方法,但是,如果您的站点具有数百个链接,那么它将是不可行的,特别是如果您需要继续更新它,因为此过程是手动完成的。

您可以尝试使用缩短的URL。 https://bitly.com/ 这样,您还可以跟踪点击次数。

或者,如果您确实有太多的URL,那么也许您应该创建一个重定向页面。 How to make a redirect in PHP?

答案 1 :(得分:1)

我写了几行代码来帮助您从实现想法开始。

创建index.php文件

我们需要做的第一件事是在一个地方处理所有请求,在本例中,这是转到位于您的主应用程序文件夹中的index.php文件。

配置.htaccess文件

我们[仍]将继续使用.htaccess rewriterule,因此,我们首先向RewriteRule文件中添加一个基本的.htaccess,以帮助我们隐藏{ {1}}从URI并通过index.php文件重定向所有请求:

index.php

<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^ index.php [L] </IfModule> 文件中构建逻辑

现在,我们准备开始在index.php文件中构建逻辑。

我想到的主意是创建一个包含所有应用程序文件夹的index.php目录,其结构如下:

app

为此,我编写了以下(下面解释)代码并将其插入 app app\faq app\faq\faq.php .htaccess index.php

index.php

此代码实际执行的操作是从请求uri中获取文件名 并在所有<?php //This function is from: https://www.lucidar.me/en/web-dev/how-to-get-subdirectories-in-php/ function getSubDirectories($dir) { $subDir = array(); $directories = array_filter(glob($dir), 'is_dir'); $subDir = array_merge($subDir, $directories); foreach ($directories as $directory) $subDir = array_merge($subDir, getSubDirectories($directory.'/*')); return $subDir; } function response(string $appDir, string $uri) { $currentDir = __DIR__; $currentDirBaseName = basename($currentDir); //Get the the basename of the current directory $filename = str_replace('/'.$currentDirBaseName.'/', '', $uri); //Remove the current directory basename from the request uri if(strpos($filename, '/') > -1) { //If the user is asking for a directory respond with an exception http_response_code(404); echo "The requested file was not found."; } foreach(getSubDirectories($currentDir.'/'.$appDir) as $dir) { //Iterate through all the subdirerctories of the app directory $file = $dir.'/'.$filename; //Filename if(!is_dir($file) && file_exists($file)) { //If the $file exists and is not a directory, `include()` it include($dir.'/'.$filename); exit; //or return; } } http_response_code(404); echo "The requested file was not found."; } //Get the request uri $uri = $_SERVER['REQUEST_URI']; //Define the app directory $appDirectory = 'app'; response($appDirectory, $uri); 子目录中查找(递归),如果 找到该文件,它将被$appDirectory文件include d保存,否则将显示错误。

注意: :该脚本仅用于演示,仍然需要开发。 例如在某些情况下,您可能在两个不同的目录中拥有两个名称相同的文件,该脚本只会显示找到的第一个文件。

我还建议您阅读"How to build a basic server side routing system in PHP"