【问题标题】:.htaccess - Redirect from trailing slash URL to non trailing slash whilst retaining www. and https rules.htaccess - 从尾部斜杠 URL 重定向到非尾部斜杠,同时保留 www。和 https 规则
【发布时间】:2017-09-22 15:09:21
【问题描述】:

我正在尝试让我的 .htaccess 文件将带有斜杠的任何 URL 重定向到非斜杠版本。例如。 example.com/contact/ 到 example.com/contact

我需要保留 http 到 https 和 www。非中国的膳宿条件。根据我当前的 .htaccess 文件的规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*?)/?$ https://%1/$1 [L,R=301,NE]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{HTTPS} !on
RewriteRule ^(.*?)/?$ https://%1/$1 [L,R=301,NE]

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    用以下 3 条重定向规则替换所有规则:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301,NE]
    
    # ensure https
    RewriteCond %{HTTP:X-Forwarded-Proto} !https 
    RewriteCond %{HTTPS} !on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
    
    ## Unless directory, remove trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ /$1 [NE,R=301,L]
    

    【讨论】:

    • 确定前两条规则应该使用 L 标志吗?如果有人调用 http://[...]/ 第二条规则更改为 https 但尾部斜杠仍然存在,对吗?
    • @JoshuaK:感谢您的发现,这是我在第二条规则中的错误。现已更正。
    • 再次抱歉...但是:为什么要多次重定向而不是遍历所有规则并在最后进行重定向?
    • 当然但是。 rewritecond 仅对下一个 rewriterule 有效。所以在每次重写之后,其他重写条件都被“遗忘”了……编辑:为什么 L 和 R 在一起?通常重定向时会取消处理。使用 R=301 时不需要 L 标志,还是我错了?
    • 是的,但我不知道如何将所有 3 条规则合二为一,因为 RewriteCond %{REQUEST_FILENAME} !-d 仅适用于第 3 条规则。对于像 http://www.example.com/abc123/ 这样的 URL,将有 2 个重定向而不是 3 个。尝试在没有 L 标志的情况下进行测试,您会看到问题。顺便说一句,我们不应该延长这个 cmets 部分。如果您想提出一个新问题,我们会在那里提出。
    猜你喜欢
    • 2017-09-28
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多