0

我在重定向网站文件夹链接时遇到了一个简单的问题。我有一个主域,可以说 ABC.COM,我有另一个子域 XYZ.com。我在 ABC.com 的文档根文件夹中有 XYZ.com,文件夹名称是 othersite。一切都很完美,但是当我在像 www.XYZ.com/hero 这样的浏览器中手动输入时,它需要 m tot hat 目录,但浏览器中的 url 会发生变化并显示 www.XYZ.com/othersite/hero。我不知道为什么会这样,但是当我输入 www.XYZ.com/hero/ 时它会起作用,即在末尾加上 /。

这是我在 abc.com htaccess 中的主要 htaccess 中的内容

RewriteEngine On
Options +FollowSymlinks

RewriteBase /

RewriteCond %{HTTP_HOST} ^xyz\.com$ [OR]

RewriteCond %{HTTP_HOST} ^www\.xyz\.com$
RewriteCond %{REQUEST_URI} !^/othersite/

RewriteRule ^(.*)$ othersite/$1
4

1 回答 1

1

这是因为 mod_dir 已打开,并且会自动重定向对缺少尾部斜杠的目录的请求以包含尾部斜杠。如果您不这样做,则会存在信息泄露安全风险:

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

因此,您可以通过包括以下内容来关闭此自动重定向:

DirectorySlash Off

如果您不关心显示目录内容而不是索引文件的问题。或者,您可以在内部重写之前自己执行重定向,以确保有一个斜杠但不暴露内部:

RewriteCond %{DOCUMENT_ROOT}/othersite/%{REQUEST_URI} -d
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ /$1/ [L,R=301]

然后是你的其余规则。

于 2013-05-09T18:39:11.893 回答