如何编写将“/folder1/folder2/”更改为“/”的.htaccess

Posted

技术标签:

【中文标题】如何编写将“/folder1/folder2/”更改为“/”的.htaccess【英文标题】:How to write an .htaccess that changes "/folder1/folder2/" to "/" 【发布时间】:2021-05-20 13:00:32 【问题描述】:

我正在尝试提出一个涉及本地文件包含的 ctf 挑战。

考虑到这一点,我用/etc//var//home 等重新创建了一个类似“linux”的文件夹系统……因为我使用免费的网络托管服务。

为了不让用户觉得可疑,我只想以图形方式更改 URL,使其看起来像用户在根目录中,而他确实在其他子目录中(用户还需要能够包含../../etc/passwd)。到目前为止,这就是我所拥有的:

RewriteEngine On
RewriteBase /folder1/folder2/

这个文件位于/folder1/folder2/,但它什么也没做......

有人可以帮我吗?

PS : 对不起我的英语。

【问题讨论】:

【参考方案1】:
RewriteBase /folder1/folder2/

RewriteBase 本身不会做任何事情。 RewriteBase 指令覆盖要在 RewriteRule 指令中的相对路径替换中使用的基本 URL 路径。例如,给定以下内容:

RewriteBase /folder1/folder2/
RewriteRule ^foo$ bar [L]

根据上述情况,如果您请求 /foo,则该请求将在内部重写为 /folder1/folder1/bar,因为 substitution 字符串 barrelative。这与陈述以下内容相同:

RewriteRule ^foo$ /folder1/folder2/bar [L]

这就是RewriteBase 指令所做的一切。您在这里并不严格需要它,但您可以根据需要使用它。

这个文件位于“/folder1/folder2/”,但它什么也没做......

您需要针对文档根目录的请求,因此您不能将这个.htaccess 文件放在/folder1/folder2/ 目录中——它根本不会做任何事情。位于/folder1/folder2/.htaccess.htaccess 文件只会将请求定位到/folder1/folder2/ 及其所有子目录。

您希望在内部将所有请求从文档根目录重写到/folder1/folder2/ 目录 - 有效地向用户隐藏/folder1/folder2/

为此,您需要在位于文档根目录的/.htaccess 文件中使用类似以下内容:

RewriteEngine On

RewriteRule !^folder1/folder2 /folder1/folder2%REQUEST_URI [L]

以上内容将任何尚未针对/folder1/folder2 的请求重写到该子目录。

用户还需要能够包含../../etc/passwd

我不确定您打算如何“包含”它,但如果您指的是客户端 URL 路径,那么您不应该使用这样的相对 URL 路径。使用根相对 URL 路径,例如。 /etc/passwd(来自文档根目录)。

如何编写将/folder1/folder2/ 更改为/.htaccess

请注意,这个.htaccess 文件的作用完全相反。它将请求 /(文档根)的 URL 更改为 /folder1/folder2/ - 这似乎是您问题中的要求。您需要在内部链接中将/folder1/folder2/ 更改为/

【讨论】:

非常感谢!我会尽快尝试。我还打算用一个简单的“include $_GET['page'];”来包含它希望这个 htaccess 不会将包含重定向到子目录,而只会重定向到浏览器请求。 这不会重定向普通的 php 包含(如果这是您所指的)。 .htaccess 适用于 HTTP 请求。一个普通的 PHP 包含不是一个 HTTP 请求。

以上是关于如何编写将“/folder1/folder2/”更改为“/”的.htaccess的主要内容,如果未能解决你的问题,请参考以下文章

帮助使用 VBScript 在 Windows 中创建 Folder1/Folder2(这两个文件夹以前都不存在,我的意思是创建多级文件夹@a strech。)

将文件移动到文件夹,Python中的循环[重复]

将请求从一个文件夹重定向到htaccess中的另一个文件夹

将python字典项写入单独的txt文件

在Matlab中通过imwrite将图像写入文件夹

如何比较 2 个文件夹在 Unix 上的权限?