5

我使用以下规则为不同版本使用文件夹:

RewriteEngine On
RewriteRule .* - [E=VERSION:020]
RewriteRule ^versions/(.*)$ versions/$1 [L]
RewriteRule ^(.*)$ versions/%{ENV:VERSION}/$1 [L]

我有一个像这样的结构:

http://domain.com/versions/020/
http://domain.com/versions/020/th?=1
http://domain.com/versions/020/myfolder/
http://domain.com/versions/020/myfile.html

但是用户可以看到:

http://domain.com/
http://domain.com/th?=1
http://domain.com/myfolder/
http://domain.com/myfile.html

我有一个显示版本号的斜线的最后一个问题。

第二个入口点是(仍在工作):

http://domain.com/site/

但是当用户键入 url 并省略结束正斜杠时出现问题,如下所示:

http://domain.com/site

用户现在看到的版本号是这样的:

http://domain.com/versions/020/site/

这是一个问题,因为我不希望用户了解其他版本。

知道如何解决这个问题吗?

4

1 回答 1

1

看起来这会干扰 mod_dir,默认情况下,它会在浏览器尝试访问目录并且缺少尾部斜杠时重定向浏览器。正在发生的是 Rewrite 正在发生,更改/site/versions/020/site然后 mod_dir 将浏览器重定向到http://domain.com/versions/020/site/. 因此,浏览器会在地址栏中看到版本/020 的内容。

您可以使用“DirectorySlash Off”指令关闭 mod_dir 的自动重定向。但是您可能希望通过在任何重写发生之前包含重定向来添加尾部斜杠。

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [R,L]

在您进行重写之前,这个或等效的东西/version/020应该有望修复它。

编辑:实际上,现在我正在考虑它,如果您在缺少尾部斜杠时重写/重定向,则不需要关闭,DirectorySlash因为它在到达 mod_dir 时总会有一个尾部斜杠。也许无论如何都这样做是为了安全?

于 2011-10-22T02:59:39.770 回答