Sou*_*tep 5 apache .htaccess mod-rewrite version slash
我正在使用以下规则来使用不同版本的文件夹:
RewriteEngine On
RewriteRule .* - [E=VERSION:020]
RewriteRule ^versions/(.*)$ versions/$1 [L]
RewriteRule ^(.*)$ versions/%{ENV:VERSION}/$1 [L]
Run Code Online (Sandbox Code Playgroud)
我有一个像这样的结构:
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
Run Code Online (Sandbox Code Playgroud)
但是用户可以看到:
http://domain.com/
http://domain.com/th?=1
http://domain.com/myfolder/
http://domain.com/myfile.html
Run Code Online (Sandbox Code Playgroud)
我有一个斜杠的最后一个问题,显示版本号.
第二个入口点是(仍在工作):
但是当用户键入url并省略结束正斜杠时的问题,如下所示:
用户现在看到如下版本号:
http://domain.com/versions/020/site/
这是一个问题,因为我不希望用户了解其他版本.
知道如何解决这个问题吗?
看起来这会干扰 mod_dir,默认情况下,当浏览器尝试访问目录并且尾部斜杠丢失时,它会重定向浏览器。正在发生的事情是重写正在发生,更改/site为/versions/020/site然后 mod_dir 将浏览器重定向到http://domain.com/versions/020/site/. 因此,浏览器会在地址栏中看到 versions/020 内容。
您可以使用“DirectorySlash Off”指令关闭 mod_dir 的自动重定向。但无论如何,您可能希望通过在任何重写发生之前包含重定向来添加尾部斜杠。
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [R,L]
Run Code Online (Sandbox Code Playgroud)
在重写之前,这个或类似的东西/version/020应该可以修复它。
编辑:实际上,现在我正在考虑这个问题,如果您在缺少尾部斜杠时重写/重定向,则不需要关闭,DirectorySlash因为在到达 mod_dir 时它始终会有一个尾部斜杠。也许为了安全还是这样做?
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           188 次  |  
        
|   最近记录:  |