强制子文件夹遵循父htaccess重定向规则?

时间:2015-08-14 16:31:25

标签: apache .htaccess redirect

我目前在服务器上使用以下.htaccess代码,以便我可以从public_html文件夹中的子文件夹托管主域文件:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/subdirectory/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdirectory/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ subdirectory/index.php [L]

然而,这并没有解决这个新根的子文件夹的问题。例如,我有两个文件夹:

public_html\example\ - 应与 www.example.com

相对应

public_html\example\subfolder - 应与 www.example.com/subfolder

相对应

我的问题是,在浏览器中导航到 www.example.com/subfolder 会将我重定向到 www.example.com/example/subfolder

编辑:除了来自@Jon的回复之外,只有在导航到的网址时没有一个尾部斜杠时才会发生这种情况。导航到 www.example.com/subfolder / 正在按预期工作。

如何阻止重定向到www.example.com/example/subfolder?

1 个答案:

答案 0 :(得分:0)

当您转到某个文件夹的URL并且缺少尾部斜杠时,apache将重定向浏览器,以便在结尾处有一个尾部斜杠。这有时会破坏内部重写请求的重写规则。

您必须转到example.com/subfolder/或关闭目录斜杠功能。但是,turning this off can be very dangerous

  

安全警告

     

关闭尾部斜杠重定向可能会导致信息泄露。考虑一下mod_autoindex处于活动状态(Options + Indexes)并且DirectoryIndex设置为有效资源(例如index.html)的情况,并且没有为该URL定义其他特殊处理程序。在这种情况下,带有斜杠的请求将显示index.html文件。 但是没有尾随斜杠的请求会列出目录内容

这意味着,如果有人前往:example.com/subfolder,他们会看到你的目录内容,尽管那里有一个index.php文件。你可以关闭索引但是他们只会看到403,但仍然看不到你的index.php。