【问题标题】:.HTAccess multiple redirect.HTAccess 多重重定向
【发布时间】:2018-11-17 02:54:21
【问题描述】:

如果用户写,我想实现:

http://www.example.com/url/index.html
http://www.example.com/url/
https://example.com/url/index.html
https://example.com/url/

总是重定向到:

https://www.example.com/url/

所以我在 .htaccess 中编写了这个重定向指令(我不是这方面的专家,所以我认为这可能是问题所在)并且它似乎有效:

RewriteEngine On
RewriteCond %{ENV:HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]

问题在于,从一些 SEO 工具看来,它可以在不止 1 个重定向中完成工作。事实上,我认为如果用户寻找:

http://example.com/url/

它重定向到

https://example.com/url/

之后

https://www.example.com/url/

如何更改以前的代码以使其更好,并通过 1 重定向使所有内容都变得更好?

谢谢

【问题讨论】:

    标签: .htaccess redirect mod-rewrite


    【解决方案1】:

    您可以缩短您的 http 到 https 重定向规则。而不是为httphtttps://www 使用两个单独的规则,您可以只使用一个重写规则,在一个重定向中处理这两个规则。

    RewriteEngine on
    # http to https and non-www to www
    RewriteCond %{ENV:HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
    RewriteRule ^.*$ https://www.%1%{REQUEST_URI} [NE,R=301,L]
    # remove index.html
    RewriteRule ^(.*)\.index\.html$ /$1 [L,R=301]
    

    在测试此 htaccess 之前清除浏览器缓存。

    【讨论】:

    • 感谢您的回答,无论如何我尝试了您建议的代码,但服务器用 500 错误代码回答我...您可以检查一下吗?
    • @pinguinone 我在我的服务器上测试了代码。它工作正常。请检查您的日志文件以获取有关 500 错误的信息。
    • 好的,我试着理解问题出在哪里,它在行中: RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ 如果我把你的代码放在这一行之外一切顺利。服务器告诉我这个错误:[Tue Jun 12 17:58:52.010204 2018] [core:alert] [pid 17834] [client 95.224.198.32:37062] /var/www/vhosts/domain.com/httpdocs/.htaccess : RewriteCond: 错误的标志分隔符"
    • @pinguinone 在捕获组(. +)$ 中有一个空格。我已将其删除,现在应该可以使用了。
    • 太棒了!它就像一个魅力!非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-08-20
    • 2019-09-11
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多