首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重定向到https并在一个重定向中添加尾部斜杠

重定向到https并在一个重定向中添加尾部斜杠
EN

Stack Overflow用户
提问于 2021-11-19 08:17:53
回答 1查看 42关注 0票数 0

我想重定向到https,并在一个重定向中添加一个尾随斜杠。

这是我当前的.htaccess:

代码语言:javascript
运行
复制
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://www.test.ru%{REQUEST_URI} [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ https://www.test.ru/$1/ [L,R=301]

当我打开一个伪造的url时,我得到两个重定向。

代码语言:javascript
运行
复制
http://www.test.ru/documents/test
301 Moved Permanently
https://www.test.ru/documents/test
301 Moved Permanently
https://www.test.ru/documents/test/

有没有办法把它合并成一个重定向?

代码语言:javascript
运行
复制
http://www.test.ru/documents/test
301 Moved Permanently    
https://www.test.ru/documents/test/

这也可能与

代码语言:javascript
运行
复制
RedirectMatch 301  ^/fitness/$  /services/fitness/
RewriteRule ^fitness/$ services/fitness/ [R=301,L]

这台服务器出了什么问题?我有一种感觉,规则是一个接一个地执行的。

EN

回答 1

Stack Overflow用户

发布于 2021-11-19 09:00:08

当您使用带有重定向标志[R=301]的Apache标志时,[L]将立即重定向,而忽略其他规则。您当前的规则需要两个背靠背的重定向。

您可以将这两个规则与[OR]标志组合在一起。我省略了X-Forwarded-Proto条件,因为如果你运行一个负载均衡器,你应该正确地配置它。

代码语言:javascript
运行
复制
RewriteCond %{HTTPS} off [OR]
RewriteCond %{REQUEST_URI} !.*/$
RewriteRule ^(.*)/?$ https://www.test.ru/$1/ [R=301,L]

使用这些规则,我们首先测试url是否与^(.*)/?$匹配。这总是正确的。最后一个斜杠是可选的,因为它后面的?,而捕获组只捕获它之前的所有内容。

然后我们检查https是否关闭。如果是,我们执行规则并重定向。如果我们已经在https上,我们检查第二个条件,并检查url是否没有以斜杠结尾。如果该条件为真,我们也会执行该规则。

规则本身确保匹配斜杠之前的所有url。这样,我们总是可以在末尾添加斜杠,而不会以多个斜杠结束。协议和主机不是可变的,所以我们在这里对其进行了硬编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70031743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档