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

Remove trailing slash in .htaccess for CloudFront use

Whosebug 上有很多 'remove trailing slash' 位正则表达式,它们都很可爱,但它们都有相同的问题:它们不能很好地与 Amazon CloudFront 等 CDN 服务配合使用.

所以,我的设置是 www.example.com 是 Amazon Cloudfront,而我的真实网站是 real.example.com。

下面的所有三个都会愉快地从 www.example.com/directory/ 中删除尾部斜杠,但会将 URL 重写为 real.example.com/directory 这显然是我不想要的。

我用过

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 ^(.+?)/$ / [R=301,L]

...但是所有这些都会暴露 'real' 域名。

我如何编写一个正则表达式重写规则来正确删除尾部斜杠但不将域重写为原始网站?

(我不介意在此处对域 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/ [R=301,L]