如何编写将“/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 字符串 bar
是 relative。这与陈述以下内容相同:
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。)