删除.htAccess中的尾部斜杠以供CloudFront使用

人气:448 发布:2022-10-16 标签: apache .htaccess mod-rewrite regex cdn

问题描述

StackOverflow上有很多"删除尾部斜杠"的正则表达式,它们都很可爱,但它们都有一个相同的问题:它们与Amazon CloudFront等CDN服务不能很好地配合。

所以,我的设置是www.Example.com是Amazon CloudFront,而我的真实网站是,比如说,real.Example.com。

下面的三个选项都将很高兴地删除www.example.com/目录/中的尾部斜杠,但会将URL重写为real.example.com/目录,这显然不是我想要的。

我已使用

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

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

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} s(.+?)/+[?s]
RewriteRule ^(.+?)/$ /$1 [R=301,L]

...但所有这些都会暴露"真实"域名。

我如何编写一条regex重写规则来正确删除尾随斜杠,但不会将域重写到源网站?

(我不介意在此处硬编码域URL,但我需要保持http或HTTPS位不变。)

推荐答案

您尝试过这样的操作吗?

# Set "protossl" to "s" if we were accessed via https://. This is used later
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ http%{ENV:protossl}://www.example.com/$1 [R=301,L]

875