gpt4 book ai didi

apache - 重写模块以处理站点版本文件夹(条斜杠)

转载 作者:行者123 更新时间:2023-12-02 07:23:15 24 4
gpt4 key购买 nike

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

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/

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

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

最佳答案

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

您可以使用"DirectorySlash Off" directive关闭mod_dir的自动重定向。 。但无论如何,您可能希望通过在任何重写发生之前包含重定向来添加尾部斜杠。

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

在重写 /version/020 之前,这个或类似的东西应该可以修复它。

编辑:实际上,现在我正在考虑这个问题,如果您在缺少尾部斜杠时重写/重定向,则无需关闭 DirectorySlash 因为它始终会有一个当它到达 mod_dir 时尾随斜杠。也许为了安全起见还是这样做?

关于apache - 重写模块以处理站点版本文件夹(条斜杠),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7737909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com