【问题标题】:Redirect to https and add trailing slash in one redirect重定向到 https 并在一个重定向中添加斜杠
【发布时间】:2021-12-30 01:04:57
【问题描述】:

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

这是我当前的 .htaccess:

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]

当我打开一个假网址时,我会收到两个重定向

http://www.test.ru/documents/test
301 Moved Permanently
https://www.test.ru/documents/test
301 Moved Permanently
https://www.test.ru/documents/test/

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

http://www.test.ru/documents/test
301 Moved Permanently    
https://www.test.ru/documents/test/

这也可能是相关的

RedirectMatch 301  ^/fitness/$  /services/fitness/
RewriteRule ^fitness/$ services/fitness/ [R=301,L]

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

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

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

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

    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{REQUEST_URI} !.*/$
    RewriteRule ^(.*)/?$ https://www.test.ru/$1/ [R=301,L]
    

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

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

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

    【讨论】:

    • 非常感谢,这正是我不记得重定向顺序的原因。还有待弄清楚如何正确配置它。该网站很旧,有数千个 2 重定向和铲除一切 - 客户端还没有准备好。但这并不能回答可能的主要问题,为什么在编写重定向时重定向 301 /old-page/ /new-cat/old-page/ 然后首先重定向到 http,这最不清楚。该页面通过https打开,但重定向到http然后返回,然后一切正常。
    • RedirectRedirectMatch 由与 RewriteRule 不同的 Apache 模块处理。它们在仅进行重定向时不会组合,甚至不会相互交互。为什么它会重定向到 http 虽然我不确定。
    • 我尝试了 RewriteRule,结果是一样的:首先重定向到 http,然后返回到 https。仅当您直接指定协议时,它才能正常工作。感觉是默认情况下,不直接指定协议,RewriteRule创建一个重定向到http
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 2017-08-16
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2013-01-27
    • 2011-10-19
    相关资源
    最近更新 更多