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/ 更改为/。